【发布时间】:2016-08-20 19:44:59
【问题描述】:
我有一个有趣的问题,我无法通过谷歌搜索解决。
我正在尝试处理目录中的每个文件。一些文件名包含特殊的 shell 字符($、(、) 等)。这种文件名的一个很好的例子:
FOO.-6.BAR.(nil).$0BAZ
当我尝试在 bash 中打开此文件而不进行任何转义时,我收到错误 No matches found 因此我需要以下列方式转义它:
FOO.-6.BAR.\(nil\).\$0BAZ
因此它确实在 bash 中打开(例如 cating 有效)。
但是,问题是即使我在 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。
此时我有点想不通。
【问题讨论】:
-
您是否尝试过 os.listdir('.') 来查看名称的格式,然后使用它打开它们?
-
我似乎无法重现这一点。你用的是哪个python版本?你能分享你的代码吗?我已经试过了,没有逃跑,效果很好。
-
是的。这实际上是我用来遍历目录中每个文件的方法,即我使用
os.listdir(directory)来获取文件列表,然后处理每个文件。名称本身是未转义的。我在 OS X 上使用 Python 2.7。
标签: python bash shell escaping character