在python 2.7.2中,我需要在Linux中創建一個文件的副本。運行cp命令在Python中創建文件的副本或更改文件名
的newfile = 「namePart1」 +辭典[鍵] + 「namePart2」
使用os.system( 「CP cfn5e10_1.lp newfile中」)
但是,所述的newfile不能由它的正確的字符串來代替。
在論壇中的帖子不能幫助。
任何幫助真的很感激。
在python 2.7.2中,我需要在Linux中創建一個文件的副本。運行cp命令在Python中創建文件的副本或更改文件名
的newfile = 「namePart1」 +辭典[鍵] + 「namePart2」
使用os.system( 「CP cfn5e10_1.lp newfile中」)
但是,所述的newfile不能由它的正確的字符串來代替。
在論壇中的帖子不能幫助。
任何幫助真的很感激。
使用shutil.copyfile
來複制文件而不是os.sytem
,它不需要創建一個新的進程,它會自動處理文件名中含有不常用字符的文件名。空格 - os.system
只是將命令傳遞給shell,並且shell可能會拆分其中包含空格的文件名以及其他可能的問題。
例如:
newfile = "namePart1" + dictionary[key] + "namePart2"
shutil.copyfile("cfn5e10_1.lp", newfile)
這將不幸地不適用於所有文件類型。例如,格式化的xls在使用'copyfile'時不會保留其格式。對於OP,它應該完成這項工作。 – Kazanz 2017-07-02 18:18:06
@Kazanz:嗯,什麼?格式化的Excel文檔與什麼有關?你可以說得更詳細點嗎? 'shutil.copyfile'很可能不會複製文件的[備用數據流](https://en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29)(如果存在),但我不知道任何Excel文件使用備用數據流。 – 2017-07-10 03:48:53
是的,你是對的。 '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
這不會取代newfile
與您的變量。
os.system("cp cfn5e10_1.lp newfile")
您需要的變量串聯到字符串的結尾,像這樣:
os.system("cp cfn5e10_1.lp " + newfile)
這不是安全的,因爲它不防止'newfile'被字符串拆分爲多個單詞,如果它包含空格, 例如。 – 2012-07-20 18:43:32
如果你想打電話cp
從Python中,使用subprocess
模塊:
subprocess.call(["cp", "cfn5e10_1.lp", "newfile"])
但是最好使用shutil
模塊中的某個功能。
你確定你在調用os.system嗎?因爲它會將原始文件複製到一個名爲「newfile」的文件中(而不是它在變量newfile中所說的那個文件) – BorrajaX 2012-07-20 17:56:04
問問複製或重命名文件的最佳方式是用Python編寫的,而不是詢問如何從Python使用'cp'或'mv'。 – 2012-07-20 18:44:36