如何使用Python重命名文件

我想把a.txt改为b.kml

661503 次浏览
import shutil


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

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

使用# EYZ1:

import os


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

用法:

os.rename('from.extension.whatever','to.another.extension')

# EYZ0

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

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

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

你可以使用os。系统调用终端来完成任务:

os.system('mv oldfile newfile')

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

如果您使用的是旧版本,则可以使用反向移植版本在这里

让我们假设你不是在根路径(只是增加一点难度),你想重命名,并必须提供一个完整的路径,我们可以看看:

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

所以,你可以用你的路径创建一个Path对象:

from pathlib import Path
p = Path(some_path)

为了提供一些关于这个物体的信息,我们可以从中提取一些东西。例如,如果出于某种原因,我们想通过将文件名从the_file修改为the_file_1来重命名文件,那么我们可以得到文件名部分:

name_without_extension = p.stem

并且仍然握着分机:

ext = p.suffix

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

Python 3.6及更高版本使用f-strings!

new_file_name = f"{name_without_extension}_1"

否则:

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

现在,我们可以通过在创建的path对象上调用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))
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 +

使用# EYZ0。但是你必须把两个文件的完整路径传递给函数。如果我的桌面上有一个a.txt号文件,那么我就这样做,我也必须给一个完整的重命名文件。

os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
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)
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)
如果你正在使用窗户并且你想重命名文件夹中的1000s文件,那么: 您可以使用下面的代码。(Python3) < / p >
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!!")

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

import pathlib


original_path = pathlib.Path('a.txt')
new_path = original_path.rename('b.kml')
< p > os.chdir (r" D: \ Folder1 \ Folder2") < br > os.rename (src, dst) < br > #src和dst应该在Folder2

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

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

import os


if not os.path.exists('b.kml'):
os.rename('a.txt','b.kml')

从Python版本3.3及更高版本开始,通常首选使用os.replace而不是os.rename,因此如果目标文件已经存在,则不会引发FileExistsError

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')

请看文档

下面是一个只使用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)

如何修改目录中文件名的首字母。

import os
path = "/"


for file in os.listdir(path):
os.rename(path + file, path + file.lower().capitalize())


then = os.listdir(path)
print(then)