550

a.txt我想改成b.kml

4

16 回答 16

862

使用os.rename

import os

os.rename('a.txt', 'b.kml')
于 2010-03-22T10:00:52.207 回答
121

文件可能在目录中,在这种情况下指定路径:

import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)
于 2015-10-15T09:15:07.007 回答
68

从 Python 3.4 开始,可以使用pathlib模块来解决这个问题。

如果您碰巧使用的是旧版本,则可以使用此处找到的反向移植版本

假设您不在要重命名的根路径(只是给它增加一点难度),并且必须提供完整路径,我们可以看一下:

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

因此,您可以选择自己的路径并从中创建一个Path对象:

from pathlib import Path
p = Path(some_path)

只是为了提供一些关于我们现在拥有的这个对象的信息,我们可以从中提取一些东西。例如,如果出于某种原因我们想通过将文件名从the_fileto修改来重命名文件the_file_1,那么我们可以获得文件名部分:

name_without_extension = p.stem

并且仍然将扩展名握在手中:

ext = p.suffix

我们可以通过简单的字符串操作来执行修改:

Python 3.6 及更高版本使用 f 字符串!

new_file_name = f"{name_without_extension}_1"

除此以外:

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

现在我们可以通过调用rename我们创建的路径对象上的方法并附加ext来完成我们的重命名,以完成我们想要的正确重命名结构:

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

更简短地展示它的简单性:

Python 3.6+:

from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))

低于 Python 3.6 的版本改为使用字符串格式方法:

from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
于 2017-07-27T14:21:32.370 回答
64
import shutil

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

这将用于重命名或移动文件。

于 2010-03-22T10:00:41.007 回答
20

os.rename(old, new)

这可以在 Python 文档中找到:http: //docs.python.org/library/os.html

于 2010-03-22T10:00:55.463 回答
13

使用os.rename. 但是您必须将两个文件的完整路径传递给函数。如果我的a.txt桌面上有一个文件,我会这样做,而且我也必须提供完整的重命名文件。

os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
于 2017-12-08T05:33:01.093 回答
6

从 Python 版本 3.3 及更高版本开始,如果目标文件已经存在,则通常首选使用它来os.replace代替。os.renameFileExistsError

assert os.path.isfile('old.txt')
assert os.path.isfile('new.txt')

os.rename('old.txt', 'new.txt')
# Raises FileExistsError
os.replace('old.txt', 'new.txt')
# Does not raise exception

assert not os.path.isfile('old.txt')
assert os.path.isfile('new.txt')

请参阅文档

于 2021-08-10T20:31:40.113 回答
4
import os

# Set the path
path = 'a\\b\\c'  
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in 
os.chdir(saved_cwd)
于 2018-04-02T01:17:50.147 回答
4

这里要注意的一点是,我们应该检查是否存在任何具有新文件名的文件。

假设如果 b.kml 文件存在,那么重命名具有相同文件名的其他文件会导致删除现有的 b.kml。

import os

if not os.path.exists('b.kml'):
    os.rename('a.txt','b.kml')
于 2021-02-13T14:55:17.993 回答
2

使用 Pathlib 库的Path.rename而不是 os.rename:

import pathlib

original_path = pathlib.Path('a.txt')
new_path = original_path.rename('b.kml')
于 2020-11-16T19:57:45.133 回答
2

这是一个示例,pathlib仅使用而不使用os它来更改目录中所有文件的名称,基于字符串replace操作而不使用字符串连接:

from pathlib import Path

path = Path('/talend/studio/plugins/org.talend.designer.components.bigdata_7.3.1.20200214_1052\components/tMongoDB44Connection')

for p in path.glob("tMongoDBConnection*"):
    new_name = p.name.replace("tMongoDBConnection", "tMongoDB44Connection")
    new_name = p.parent/new_name
    p.rename(new_name)
于 2021-11-22T13:29:29.403 回答
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")

这应该这样做。蟒蛇 3+

于 2017-09-30T12:40:02.923 回答
0

如果您使用的是Windows,并且想要重命名文件夹中的 1000 个文件,那么:您可以使用以下代码。(Python3)

import os

path = os.chdir(input("Enter the path of the Your Image Folder :  ")) #Here put the path of your folder where your images are stored

image_name = input("Enter your Image name : ") #Here, enter the name you want your images to have

i = 0

for file in os.listdir(path):

    new_file_name = image_name+"_" + str(i) + ".jpg" #here you can change the extention of your renmamed file.
    os.rename(file,new_file_name)

    i = i + 1

input("Renamed all Images!!")
于 2020-09-19T09:22:24.893 回答
-1

os.chdir(r"D:\Folder1\Folder2")
os.rename(src,dst)
#src和dst应该在Folder2里面

于 2020-12-11T18:46:15.063 回答
-2
import os
import re
from pathlib import Path

for f in os.listdir(training_data_dir2):
  for file in os.listdir( training_data_dir2 + '/' + f):
    oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
    newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
    p=oldfile
    p.rename(newfile)
于 2018-05-31T13:22:53.257 回答
-4

您可以使用 os.system 调用终端来完成任务:

os.system('mv oldfile newfile')
于 2016-01-11T05:02:24.767 回答