我正在尝试使用$ 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))
答案 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')