python - 如何重命名排序列表中的文件?
问题描述
我有一堆编号为 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())
当我 printsorted_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!")
这曾经适用于未排序的文件,但我不确定如何使其适用于排序列表。有什么我想念的吗?
编辑:我向同事展示了脚本,我们最终重写了整个事情......我摆脱了全局变量和其他此类非 pythonic 的东西。
解决方案
如果我做对了,你只需要像这样重命名文件:
结果 1.pdf -> 输出 300.pdf ... 结果 20.pdf -> 输出 319.pdf
我会将数字解析为 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
推荐阅读
- c++ - 不起作用复制赋值运算符
- java - 没有 kotlin 代码时,我真的需要使用 kapt 吗?
- c# - C#如何计算二进制字符串的奇偶校验并将其添加到字符串中
- java-8 - 使用 java 8 api 在 CompletableFuture 上流式传输时出现编译错误
- c++ - 如何在 C++ 应用程序中设置“选择精度”光标?
- google-sheets - 计算联赛积分榜模板中的总比赛数
- javascript - 将字符串数组与对象数组进行比较并删除
- intellij-idea - IntelliJ IDEA - 在路径中查找被锁定在另一个窗口监视器中
- python - 如何通过逐行读取文件来制作json字符串?
- arm - 周期不一致且不反映 CPU 频率的性能计数