2012-07-20 30 views
2

在python 2.7.2中,我需要在Linux中創建一個文件的副本。運行cp命令在Python中創建文件的副本或更改文件名

的newfile = 「namePart1」 +辭典[鍵] + 「namePart2」

使用os.system( 「CP cfn5e10_1.lp newfile中」)

但是,所述的newfile不能由它的正確的字符串來代替。

在論壇中的帖子不能幫助。

任何幫助真的很感激。

+1

你確定你在調用os.system嗎?因爲它會將原始文件複製到一個名爲「newfile」的文件中(而不是它在變量newfile中所說的那個文件) – BorrajaX 2012-07-20 17:56:04

+2

問問複製或重命名文件的最佳方式是用Python編寫的,而不是詢問如何從Python使用'cp'或'mv'。 – 2012-07-20 18:44:36

回答

8

使用shutil.copyfile來複制文件而不是os.sytem,它不需要創建一個新的進程,它會自動處理文件名中含有不常用字符的文件名。空格 - os.system只是將命令傳遞給shell,並且shell可能會拆分其中包含空格的文件名以及其他可能的問題。

例如:

newfile = "namePart1" + dictionary[key] + "namePart2" 
shutil.copyfile("cfn5e10_1.lp", newfile) 
+0

這將不幸地不適用於所有文件類型。例如,格式化的xls在使用'copyfile'時不會保留其格式。對於OP,它應該完成這項工作。 – Kazanz 2017-07-02 18:18:06

+0

@Kazanz:嗯,什麼?格式化的Excel文檔與什麼有關?你可以說得更詳細點嗎? 'shutil.copyfile'很可能不會複製文件的[備用數據流](https://en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29)(如果存在),但我不知道任何Excel文件使用備用數據流。 – 2017-07-10 03:48:53

+0

是的,你是對的。 'shutil.copyfile'是解決方案,OP應該知道它不會複製文件元數據的警告。 [請參閱此處的警告](https://docs.python.org/3.6/library/shutil.html#module-shutil)。 「在POSIX平臺上,這意味着文件所有者和羣組以及ACL都會丟失,在Mac OS上,不會使用資源分叉和其他元數據,這意味着資源將會丟失,文件類型和創建者代碼將不正確。在Windows上,文件所有者,ACL和備用數據流不會被複制「 - python docs – Kazanz 2017-07-10 15:46:57

2

這不會取代newfile與您的變量。

os.system("cp cfn5e10_1.lp newfile") 

您需要的變量串聯到字符串的結尾,像這樣:

os.system("cp cfn5e10_1.lp " + newfile) 
+1

這不是安全的,因爲它不防止'newfile'被字符串拆分爲多個單詞,如果它包含空格, 例如。 – 2012-07-20 18:43:32

1

如果你想打電話cp從Python中,使用subprocess模塊:

subprocess.call(["cp", "cfn5e10_1.lp", "newfile"]) 

但是最好使用shutil模塊中的某個功能。