以特定格式重命名 python 的文件

Renaming files with python in specific format

我正在尝试重命名一个文件夹中的文件,格式为 0001、0002、0010、0100 等。我对 python 非常陌生,很抱歉问了这么基础的问题。

我四处搜索,我遇到的大部分代码都会重命名文件(不是我想要的)或删除某些字符。我还遇到过使用额外模块 (glob) 的代码,这只会让我陷入困境。我看到的大部分内容都让我头晕目眩;目前我的技能不会超出简单的函数,if、when、for、while 语句等等。

我拼凑了一些我(有点)理解的代码,但它不起作用。

import os

dir = os.listdir("D:\temp\Wallpapers")

i = 0

for item in dir:
    dst ="000" + str(i) + ".jpg"
    src = item
    dst = item + dst 

    # rename() function will 
    # rename all the files 
    os.rename(src, dst) 
    i += 1

这是我得到的错误:

Traceback (most recent call last):
  File "rename.py", line 14, in <module>
    os.rename(src, dst)
FileNotFoundError: [WinError 2] The system cannot find the file specified: '00-Pyatna.jpg' -> '0000.jpg'

首先,您可以使用以下函数检索文件夹中已存在的最大数量

import re
def max_counter_in_files(folder):
    files = os.listdir(folder)
    maxnum = '0'
    if files:
        maxnum = max([max(re.findall("[\d]+", file)) for file in files])
    return maxnum

例如,如果您的文件夹包含文件

file001.txt
file002.txt
file003.txt

然后 max_counter_in_files('path/to/your/files') 会 return 3

其次,您可以使用该功能在添加新文件时增加下一个文件名。例如,

counter = int(self.max_counter_in_files(dest_path))
filename = f"filename{counter+1:04d}.txt"

filename 将是 "filename0004.txt".

它不起作用,因为您可能不在正确的目录中,而您正试图在您现在所在的目录中查找这些文件。你应该使用绝对路径来做到这一点。看下面代码

import os

base_path = "D:/temp/Wallpapers"
files = os.listdir(base_path)


for i, fp in enumerate(files):
    dst = os.path.join(base_path, "{0:04d}.jpg".format(i))
    src = os.path.join(base_path, fp) 
    os.rename(src, dst)