如何在python中移动具有复杂文件名的文件

时间:2012-02-10 00:34:16

标签: python

我正在尝试使用$ mv <file> ..在python脚本中执行subprocess.call()。我可以在'普通'文件名上执行此操作,但在某些文件名上它不起作用。我无法控制给脚本的文件名。这是一个例子:

M文件名为"ITunes ES Film Metadata_10_LaunchTitles(4th Batch)_08_20_2010.XLS"

当我尝试直接在python提示符中执行命令并将文件拖入其中时,这就是我得到的:

>>> /Users/David/Desktop/itunes_finalize/TheInventionOfLying_CSP/
    ITunes\ ES\ Film\ Metadata_10_LaunchTitles\(4th\ Batch\)_08_20_2010.XLS

No such file or directory

如何在python脚本中移动此文件?

更新

感谢您的回答,这就是我最终做到的方式:

for file in glob.glob(os.path.join(dir, '*.[xX][lL][sS]')):
    shutil.move(file, os.path.join(os.path.dirname(file), os.path.pardir))

3 个答案:

答案 0 :(得分:4)

不是使用subprocess并生成新进程,而是使用shutil.move()在Python中执行此操作。这样,名称将不会被重新解释,并且几乎没有错误的机会。

答案 1 :(得分:4)

subprocess不是去这里的最佳方式。例如,如果您使用的操作系统不符合POSIX,该怎么办?

查看shutil模块。

>>> import shutil
>>> shutil.move(src, dest)

如果找到文件名的实际字符串很难,您可以使用glob.glob模式匹配您想要的内容。例如,如果您从具有相关.XLS文件的目录运行脚本/提示,则可以执行以下操作。

>>> import glob
>>> glob.glob('*ITunes*.XLS')

您将获得一个列表,其中包含符合该模式的所有文件字符串。

答案 2 :(得分:0)

空间,parens等是shell的问题。如果你没有将它们传递给shell,它们不需要在Python中转义。

open('*WOW!* Rock&Roll(uptempo).mp3')