Python的os.makedirs在我的路径中无法理解“〜”


159

我的路径中〜有点问题。

此代码示例创建一些名为“〜/ some_dir”的目录,并且不明白我想在主目录中创建some_dir。

my_dir = "~/some_dir"
if not os.path.exists(my_dir):
    os.makedirs(my_dir)

请注意,这是在基于Linux的系统上。

Answers:


277

您需要手动扩展波浪号:

my_dir = os.path.expanduser('~/some_dir')

1
因此,我没有使用os.path.expanduser,而是执行了OP的操作,而python在当前目录中创建了“〜”目录。如何删除该目录(不删除实际主目录)?
米塔尔山快乐

1
@HappyMittal,让其他人想知道,您可以简单地使用它./来引用当前目录,从而./~删除~当前目录中的文件夹。为了更安全,只需提供完整的路径是最简单的:rm -rf path/to/bad/dir/~
alkasm

或以反斜杠将其转义:rm \~
DDMC

71

转化~/some_dir$HOME/some_dir被称为波浪线扩展和是一种常见的用户界面特征。文件系统对此一无所知。

在Python中,此功能由os.path.expanduser实现:

my_dir = os.path.expanduser("~/some_dir")

确实,拥有名为的文件或目录是完全有效的~。因此,shell home快捷方式是模棱两可的,如果可以的话,最好避免使用。
bobince 2010年

7
请注意,即使发生波浪号扩展,也可以使用“ ./~”符号在当前目录中访问名为“〜”的文件/目录。之所以可行,是因为〜扩展仅发生在文件名的开头。对于以“-”开头的文件名或命令行界面专门处理的其他字符,这也是一个方便的技巧。您可能会说我可能做了太多的Shell脚本黑客攻击。
ddaa 2010年

The file system does not know anything about it.+1
2015年

15

那可能是因为Python不是Bash,并且没有遵循相同的约定。您可以使用此:

homedir = os.path.expanduser('~')

0
from srblib import verify_folder

verify_folder('path/to/folder')

如果没有,它将创建一个文件夹,否则将不会创建文件夹。

注意:它还将在路径中创建文件夹(如果需要)

srb@srb-pc:~/hello$ ls
srb@srb-pc:~/hello$ python3 
>>> from srblib import verify_folder
>>> verify_folder('~/hello/A/B')
>>> exit()
srb@srb-pc:~/hello$ ls
A
srb@srb-pc:~/hello$ ls A
B
srb@srb-pc:~/hello$ 

这个功能像 mkdir -p path/to/folder


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.