使用 python 重命名文件名

Rename the filename using python

我有一个文件夹,里面有多个文件。在这些文件中,我想重命名其中的一些。例如:PB report December21 North.xlsbPB report November21 North.xslb等。他们都有一个相同的开始 - PB 报告。我想更改他们的名字,只留下 PB 报告和月份。例如 12 月 PB 报告.

我试过这个代码:

import os

path = r'C://Users//greencolor//Desktop//Autoreport//Load_attachments//'
for filename in os.listdir(path):
    if filename.startswith("PB report"):
     os.rename(filename, filename[:-8])

-8表示我要从第8个字符开始拆分名字

我收到这个错误:

FileNotFoundError: [WinError 2] The system cannot find the file specified

有什么建议吗?

使用 os.rename 重命名文件时需要路径:

替换:

os.rename(filename, filename[:-8])

与:

filename_part, extension = os.path.splitext(filename)
os.rename(path+filename, path+filename_part[:-8]+extension)

问题很可能是找不到文件,因为没有指定目录。您需要在文件名中添加路径:

import os

path = r'C://Users//greencolor//Desktop//Autoreport//Load_attachments//'
for filename in os.listdir(path):
    if filename.startswith("PB report"):
        os.rename(os.path.join(path, filename), os.path.join(path, filename[:-8]))

这是一个典型的例子,说明如何使用 os/os.path 来操作路径并不方便。这就是为什么 pathlib exists. By treating paths as objects, rather than strings everything becomes more sensible. By using a combination of path.iterdir() and path.rename() 你可以实现你想要的:

from pathlib import Path

path = Path(r'your path')
for file in path.iterdir():
    if file.name.startswith("PB report"):
        file.rename(file.with_stem(file.stem[:-8]))

注意 stem means the filename without the extension and that with_stem was added in Python 3.9. So for older versions you can still use with_name:

        file.rename(file.with_name(file.stem[:-8] + file.suffix))

其中 suffix 是文件的扩展名。