os.makedirs 在我的路径中不理解“~”

Posted

技术标签:

【中文标题】os.makedirs 在我的路径中不理解“~”【英文标题】:os.makedirs doesn't understand "~" in my path 【发布时间】:2011-01-04 15:35:37 【问题描述】:

我的路径中的~ 有一点问题。

此代码示例创建了一些名为 ~/some_dir 的目录,但不明白我想在我的主目录中创建 some_dir

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

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

【问题讨论】:

【参考方案1】:

您需要手动扩展波浪号:

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

【讨论】:

所以我没有使用 os.path.expanduser,而是做了 OP 所做的事情,python 在我的当前目录中创建了“~”目录。如何删除该目录(不删除实际的主目录)? @HappyMittal 对于其他想知道的人,您可以简单地使用./ 来引用您的当前目录,然后使用./~ 删除当前目录中的文件夹~。为了更安全,最简单的方法是提供完整路径:rm -rf path/to/bad/dir/~ 或者只是用反斜杠转义它:rm \~ 为什么? matlab 会自动执行此操作(以及几乎所有其他操作)。 返回的是字符串还是Path对象?【参考方案2】:

~/some_dir$HOME/some_dir 的转换称为tilde expansion,是一种常见的用户界面功能。文件系统对此一无所知。

在 Python 中,这个功能是由os.path.expanduser实现的:

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

【讨论】:

确实,拥有一个名为~ 的文件或目录是完全有效的。所以 shell home 快捷方式是模棱两可的,如果可以的话最好避免。 请注意,即使发生波浪号扩展,也可以使用“./~”表示法访问当前目录中名为“~”的文件/目录。这是有效的,因为 ~ 扩展只发生在文件名的开头。对于以“-”或命令行界面特殊处理的其他字符开头的文件名,这也是一种方便的破解方法。你可以说我可能做了太多的 shell 脚本黑客攻击。 The file system does not know anything about it. +1【参考方案3】:

这可能是因为 Python 不是 Bash 并且不遵循相同的约定。你可以使用这个:

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

【讨论】:

以上是关于os.makedirs 在我的路径中不理解“~”的主要内容,如果未能解决你的问题,请参考以下文章

模块04

os.makedirs()偶尔会失败

模块的初步认知和包的路径

Python3.x:os.mkdir与 os.makedirs(创建目录方法)区别

os模块

os模块(操作系统)