如何多次修改python中的一个文件名

How to multiplely modify one piece of the file name in python

新手。我在一个文件夹中有几个 txt 文件。我需要将 'April' 更改为 'APR'.

12 April 2019 Nmae's something Something.txt

13 April 2019 World's - as Countr something.txt

14 April 2019 Name and location.txt

15 APR 2019 Name then location,for something.txt

看起来像这样

12 APR 2019 Nmae's something Something.txt

13 APR 2019 World's - as Countr something.txt

14 APR 2019 Name and location.txt

15 APR 2019 Name then location,for something.txt

以下是类似链接,但每个链接都略有不同。

Python - Replace multiple characters in one file name

我试过这个:

import os
files = os.listdir('/home/runner/Final/foldername')
   for f in files:
newname = f.replace('April', 'APR')
os.rename(f, newname)

但是什么都没有改变,我能得到一些指南吗?

问题是 f 只是文件名,而不是完整路径,因此您的命令 os.rename(f, newname) 将重命名当前工作目录中名为 f 的文件,而不是目标目录。此外,您将尝试重命名每个文件,而不仅仅是那些实际更改的文件。

这里有一些更好的东西:

from pathlib import Path


for f in Path('/home/runner/Final/foldername').glob('*'):
    if f.is_file():
        new_name = f.name.replace('April', 'APR')
        if new_name != f.name:
            f.rename(Path('/home/runner/Final/foldername') / new_name)

它还会检查找到的东西是否真的是一个文件(否则,它会包含目录,而且您似乎不想重命名这些目录)。

请注意,在 Python 的最新版本中,这也有效:

for f in Path('/home/runner/Final/foldername').glob('*'):
    if f.is_file():
        if (new_name := f.name.replace('April', 'APR')) != f.name:
            f.rename(Path('/home/runner/Final/foldername') / new_name)

并避免不断重建 Path 对象:

folder = Path('/home/runner/Final/foldername')

for f in folder .glob('*'):
    if f.is_file():
        if (new_name := f.name.replace('April', 'APR')) != f.name:
            f.rename(folder / new_name)