我想使用Python在Linux上运行cp
命令,从而复制文件。这是我的代码:
newfile = "namePart1" + dictionary[key] + "namePart2"
os.system("cp cfn5e10_1.lp newfile")
我该如何使第二行的文本newfile
被替换为我在前一行计算出来的变量newfile
?
使用 shutil.copyfile
来复制文件,而不是使用 os.system
。它不需要创建新进程并且可以自动处理包含非常规字符(例如空格)的文件名,而 os.system
只是将命令传递给 shell,shell 可能会对其中具有空格等空白字符的文件名进行分割,或出现其他可能的问题。
例如:
newfile = "namePart1" + dictionary[key] + "namePart2"
shutil.copyfile("cfn5e10_1.lp", newfile)
copyfile
复制格式化的xls文件时,它将无法保留其格式。但对于OP来说,这应该可以完成工作。 - Red-Tune-84shutil.copyfile
很可能不会复制文件的备用数据流,但我不知道Excel文件使用备用数据流的任何用途。 - Adam Rosenfieldshutil.copyfile
就是解决方案,OP只需注意它不会复制文件元数据的警告。请参见此处的警告。“在POSIX平台上,这意味着文件所有者和组以及ACL将丢失。在Mac OS上,资源fork和其他元数据未被使用。这意味着资源将丢失,文件类型和创建者代码将不正确。在Windows上,不会复制文件所有者、ACL和备用数据流。”- Python文档 - Red-Tune-84newfile
。os.system("cp cfn5e10_1.lp newfile")
os.system("cp cfn5e10_1.lp " + newfile)
newfile
包含空格,它无法防止其被分割成多个单词。 - Charles Duffyos.system("cp " + given_dir + " " + out_dir)
。 - Cloud Chocp
,请使用subprocess
模块:subprocess.call(["cp", "cfn5e10_1.lp", "newfile"])
但最好使用shutil
模块中的函数。
cp
或mv
。 - Charles Duffy"cp cfn5e10_1.lp newfile"
中包含了实际文本newfile
而不是newfile
变量的内容。然而,OP已经明显知道如何解决这个问题——因为前一行代码中写着newfile = "namePart1" + dictionary[key] + "namePart2"
,而不是newfile = "namePart1 dictionary[key] namePart2"
,并且也没有关于如何替换该值的问题。因此,它应该被关闭为拼写错误(或者在2012年的说法中是“过于局限”)。 - Karl Knechtel