如何从排序列表中重命名文件?



我有一堆文件,编号从1-20(结果1.pdf,结果2.pdf…等),我试图重命名它们与序列号包括(结果1 =输出300,结果2 =输出301…)。

当我尝试重命名其中的20个文件时,它们被排序如下:结果1,结果10,结果11等。我有一些代码可以自然地对这些文件进行排序,并将名称存储在列表中:

import natsort
from natsort import natsorted, ns
path = os.getcwd() + "/"
raw_list = [_ for _ in os.listdir(path) if _.endswith(".pdf")]
sorted_list = natsorted(raw_list, key = lambda y: y.lower())

当我打印sorted_list时,它返回一个按我想要的方式排序的文件名列表(耶!)。

我还有一些代码,使用用户输入的一些信息重命名文件:

def rename():
global i
for filename in sorted_list:
if ".pdf" in filename:
my_dest = str(user_inp_1) + " " + str(user_inp_2).zfill(4) + ".pdf"
my_source = path + filename
my_dest = path + my_dest
os.rename(my_source, my_dest)
i = i + 1
messagebox.showinfo("Success", "All files have been renamed successfully!")

这用于非排序文件,但我不确定如何使它在排序列表上工作。我是不是漏掉了什么?

编辑:我把剧本给同事看了,最后我们重写了整个剧本……我去掉了全局变量和其他非python的东西。

如果我做对了,你只需要像这样重命名文件:

结果1.pdf ->300.输出pdf…结果20.pdf ->输出pdf

319.我将把这个数字解析为int a add 299。

from pathlib import Path
fpaths = Path().glob("Result*.pdf")
for f in fpaths:
no = int(f.stem.rsplit(" ", 1)[-1])
new_name = f"Output {no + 299}.pdf"
print(f"rename {f} -> {new_name}")
f.rename(new_name)  # comment this out for dry run

最新更新