2010-03-22 214 views

回答

192

使用os.rename

os.rename('a.txt', 'b.kml') 
+24

不要忘記「import os」 – Vladtn 2013-09-18 10:20:48

+4

應該注意的是,如果文件不在工作目錄中,您將需要完整的路徑。 – EndermanAPM 2017-03-29 11:34:50

33
import shutil 

shutil.move('a.txt', 'b.kml') 

這將工作來重命名或移動文件。

+5

'shutil.move'不是一個好因爲不是原子操作。例如,如果該文件處於打開狀態,'shutil.move'將創建一個帶有'new_name'的文件,但不會使用'old_name'刪除該文件,因此會留下兩個文件。 'os.rename'另一方面什麼都不會做,這是一個更好的選擇。 使用'shutil.move',即使您發現錯誤,您仍然需要擔心檢查和刪除流氓文件。 **當存在更好的工具時,就不值得:'os.rename' **。 – mvbentes 2017-09-20 17:37:48

20

文件可能是一個目錄內,在這種情況下,指定路徑:

import os 
old_file = os.path.join("directory", "a.txt") 
new_file = os.path.join("directory", "b.kml") 
os.rename(old_file, new_file) 
3

你可以使用os.system來調用終端完成任務:

os.system('mv oldfile newfile') 
+0

只在一個基於Unix的機器上,對吧? – LarsH 2016-05-24 14:53:07

+0

是的,這隻適用於基於Unix的機器,因爲'mv'是一個用於移動/重命名文件的unix內置命令行程序。 – 2016-11-20 18:42:55

+3

爲什麼你會調用一個終端並定義一個只有UNIX的命令,當你可以通過python以多平臺的方式完成時? – EndermanAPM 2017-03-29 11:34:21

4

從Python 3.4開始,可以使用pathlib模塊來解決這個問題。

如果你剛好是在一箇舊版本,你可以使用回遷版本發現here

讓我們假設你是不是在根路徑(只是爲了增加一點難度吧)要重命名,並必須提供完整的路徑,我們可以看看這個:

some_path = 'a/b/c/the_file.extension' 

所以,你可以把你的路徑,並創建一個Path對象出來的:

from pathlib import Path 
p = Path(some_path) 

只是提供一些關於這個對象的信息,我們現在可以從中提取出來。例如,如果出於某種原因,我們希望通過修改文件名從the_filethe_file_1重命名該文件,那麼我們可以得到的文件名部分:

name_without_extension = p.stem 

而且仍然持有在手的延伸,以及:

ext = p.suffix 

我們可以用一個簡單的字符串操作進行修改我們:

new_file_name = "{}_{}".format(name_without_extension, 1) 

現在我們可以通過調用執行我們的重命名我們創建的路徑對象,並追加extrename方法來完成正確的命名結構,我們希望:

p.rename(Path(p.parent, new_file_name + ext)) 

更多不久將展示其簡單:

from pathlib import Path 
p = Path(some_path) 
p.rename(Path(p.parent, "{}_{}".format(p.stem, 1) + p.ext)) 
+0

你爲什麼要這樣做,而不是接受的答案?似乎更復雜 – rbennell 2017-09-07 13:14:02

+1

以及@rbennell,這個答案的大部分是一個解釋。答案只是最後的三條線。此外,公認的答案是明確表示這個名稱的變化。此答案提供了一種方法來顯示如何操作文件名以保留您想要的路徑或文件名稱中的部分。此外,'python 3.4中引入了'pathlib'庫,因此在這裏共享答案也爲實體模塊提供了曝光,以展示其更多複雜需求的多功能性和用法。 – idjaw 2017-09-07 13:22:53

0
import shutil 
import os 

files = os.listdir("./pics/") 

for key in range(0, len(files)): 
print files[key] 
shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg") 

這應該這樣做。 python 3+

0

使用os.rename。但是你必須將這兩個文件的完整路徑傳遞給該函數。如果我在我的桌面上有一個文件a.txt,所以我會做,而且我也必須給予完整的重命名文件。

os.rename( 'C:\ Users \用戶桌面\ A.TXT', 'C:\ Users \用戶桌面\ b.kml')