如果文件名包含单引号/撇号,为什么我的路径会失败?

时间:2017-11-24 11:44:33

标签: python

这里的文件存在,100%:

path = "~/Music/Youtube_dl/Some Artist - 'On + Off'.m4a"
assert os.path.exists(path)

但上述情况总是失败。

如果我将实际文件名更改为test_file.m4a并执行:

path = "~/Music/Youtube_dl/test_file.m4a"
assert os.path.exists(path)

一切正常。

因此文件名中的问题是100%。但是,我无法解决这个问题。我已经尝试在字符串和各种其他解决方案之前添加u,但似乎没有任何帮助。

注意:我从外部来源获取文件名,并且无法控制其中一些文件中包含单引号/引号的事实。

1 个答案:

答案 0 :(得分:2)

~是shell构造,python对此一无所知。即使os.path.exists('~')失败了。假设它已导出,我们可以使用环境变量HOME

import os
import os.path
path = "~/Music/Youtube_dl/Some Artist - 'On + Off'.m4a"

path = path.replace('~', os.environ['HOME'])
assert os.path.exists(path)

替代方案,您可以使用os.path.expanduser(相当便携):

import os.path
path = "~/Music/Youtube_dl/Some Artist - 'On + Off'.m4a"

path = os.path.expanduser(path)
assert os.path.exists(path)