如何使用Python重命名文件

问题描述 投票:0回答:17

我想将

a.txt
更改为
b.kml

python file-rename
17个回答
1140
投票

使用

os.rename

import os

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

用途:

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

158
投票

文件可能位于目录内,在这种情况下请指定路径:

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

112
投票

从 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 字符串!

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

75
投票
import shutil

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

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


22
投票

os.rename(old, new)

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


17
投票

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

请参阅文档


14
投票

使用

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

os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')

4
投票

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

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

import os

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

4
投票

使用 Pathlib 库的 Path.rename 而不是

os.rename

import pathlib
original_path = pathlib.Path('a.txt')
new_path = original_path.rename('b.kml')

主要好处是您不必构建绝对输出路径 - 您只需传递新文件名即可。第二个好处是,如果所有路径都已经是 Pathlib 对象,它可以保持统一。


3
投票
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)

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)

1
投票

如何更改目录中文件名的首字母:

import os
path = "/"

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

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

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+


-1
投票

如果您使用 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!!")

-2
投票

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


-4
投票
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)

-6
投票

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

os.system('mv oldfile newfile')
© www.soinside.com 2019 - 2024. All rights reserved.