Python: 如何在使用os重命名文件时保留文件扩展名?

8

假设我有一个包含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)

3
将“.csv”添加到“newname”中? - Suever
newname+".csv" 这样的? - FaCoffee
获取文件名的最后四个字符 - ext = filename[-4:],将其赋值给一个变量,使用该变量构造一个新的文件名。 - wwii
2个回答

19
你可以简单地在新文件名后面添加'.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生成您的“uniquifier”。现在,您可以使用普通字符串格式化将它们粘合在一起。
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,))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接