在文件Python中打开时的特殊shell字符

时间:2016-08-20 19:45:00

标签: python bash shell escaping character

我有一个有趣的问题,我无法通过谷歌搜索解决。

我正在尝试处理目录中的每个文件。某些文件名包含特殊的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

此时我略微缺乏想法。

2 个答案:

答案 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)