2010-03-22 216 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')