Python:使用操作系统重命名文件时如何保留文件扩展名?

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

假设我有一个包含 n 个

csv
文件的文件夹,我想重命名它们。新文件名类似于
ABxxxx
,其中
xxxx
是从 1 到 1000 的渐进数字。

执行此操作时,如何保留原始文件扩展名,即

csv

到目前为止我所做的已经更改了文件名,但删除了扩展名:

directory=r'C:\Me\MyDir'
subdir=[x[0] for x in os.walk(directory)]
subdir.pop(0)

for i in subdir:
    temp_dir=r''+i
    os.chdir(temp_dir)
    a='A'
    b='B'
    for file in glob.glob("*.csv"):
        for i in range(1,1001):
           newname=a+b+i
        os.rename(file,newname)
python csv file-extension file-rename
3个回答
20
投票

您只需将

'.csv'
附加到新文件名即可:

os.rename(file, newname + '.csv')

一般来说(对于任何文件类型),更好的方法是首先使用

os.path.splitext
获取现有扩展名,然后将其附加到新文件名。

oldext = os.path.splitext(file)[1]
os.rename(file, newname + oldext)

1
投票

使用

os.path.splitext
构建
(basepath, extension)
enumerate
的元组来生成“唯一符”。现在您可以使用普通字符串格式将其粘合在一起

for i in subdir:
    temp_dir=r''+i
    os.chdir(temp_dir)
    a='A'
    b='B'
    for idx, file in enumerate(glob.glob("*.csv")):
        os.rename(file,'{0}{2}{1}'.format(*(os.path.splitext(file) + (idx,))))

0
投票

如果有人有与我类似的情况,上面接受的答案仅在您有 1 个扩展名时才有效,但如果您有类似 .png.gz 的内容,那么它就不起作用,而不是我所做的

import os
from pathlib import Path

file = "abc.png.gz"
reanme_file = "renamed_file"

file_extensions = ''.join(Path(file).suffixes)
new_file_name = reanme_file + file_extensions
os.rename(os.path.join(dir, file), os.path.join(dir, new_file_name))

这会将 abc.png.gz 重命名为renamed_file.png.gz

© www.soinside.com 2019 - 2024. All rights reserved.