我有一个有趣的问题,我无法通过谷歌搜索解决。
我正在尝试处理目录中的每个文件。某些文件名包含特殊的shell字符($
,(
,)
等)。这种文件名的一个很好的例子:
FOO.-6.BAR.(nil).$0BAZ
当我尝试在bash中打开此文件而没有任何转义时,我收到错误No matches found
因此我需要以下列方式转义它:
FOO.-6.BAR.\(nil\).\$0BAZ
因此它在bash中打开(例如cat
工作)。
然而,问题是即使我在python的代码中以完全相同的方式转义文件名,我仍然得到IOError: [Errno 2] No such file or directory
。
我还注意到,当我转义特殊字符(例如f.replace('$', '\$')
)时,open
中使用的最终文件名是双重前置我的斜杠(IOError: [Errno 2] No such file or directory: 'FOO.-6.BAR.\\(nil\\).\\$0BAZ'
),即使我打印时手工文件名(print f
)我有效FOO.-6.BAR.\(nil\).\$0BAZ
。
此时我略微缺乏想法。
答案 0 :(得分:0)
您可以通过使用os.listfiles('/path/to/stuff')
查看目录来解决此问题。你的文件将在那里带回\ x字符。尝试打开它之后。
潜在地,根据您的其他文件,您可能还希望使用Unicode来查看文件。使用os.listfiles(u'/path/to/stuff')
执行此操作。
另请参阅Python - Unable to rename a file with special characters in the file name这是一个有类似问题的帖子。
答案 1 :(得分:0)
从Python打开文件时,您不需要转义任何内容,因为您根本没有执行shell命令。
f = open("FOO.-6.BAR.(nil).$0BAZ")
os.listdir
返回的任何文件名都是如此:
for fname in os.listdir('.'):
f = open(fname)