python 处理目录中带有空格的文件名

python handle filenames with whitespace in a directory

我有一个包含名称中有空格的文件的目录,我有一个 python 脚本加载这些文件并对它们运行 tail -n1 命令,但是由于在名字,它失败了。例如。

我有一个包含以下文件的目录

data from_10_13_2014 09_00_45.json

我的脚本包含以下行 line = os.popen("tail -n1 %s" % files).read()

截至目前,我收到以下错误

tail: cannot open ‘/home/dataserver/Development/Test/data’ for reading: No such file or directory
tail: cannot open ‘from_10_13_2014’ for reading: No such file or directory
tail: cannot open ‘09_00_45.json’ for reading: No such file or directory

我现在的解决方法是用 _ 替换空格,有什么办法可以不重命名文件吗?

</code> 替换为 <code>\ </code> <code>files。所以一个反斜杠 + space.

试试"tail -n1 %r",它将使用字符串的字符串表示,即tail -n1 "data from_10_13_2014 09_00_45.json"

或者更好的是,切换到使用自动转义参数的 subprocess module. Here you can for example use the subprocess.check_output 函数:

tail_line = subprocess.check_output(["tail", "-n1", files])

我建议您完全不要在文件名中使用白色 space,它最终总是会破坏脚本。也许您可以编写第二个脚本来规范化您的文件名?

问题是您依赖 popen 来为您解析命令行,当然,它使用空格来进行一些解析。更好的解决方案是建立一个单独的参数列表,这样就不必进行命令行解析。

最简单的方法是使用 subprocess.check_output:

line = subprocess.check_output(["tail", "-n1", "/tmp/junk.py"])