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 在我的路径中不理解“~”的主要内容,如果未能解决你的问题,请参考以下文章