用ChatGPT进行批量重命名时,一部分成功了,但有一部分文件标题没有变化。
问下ChatGPT怎么回事:
回复:在Windows中,文件名不能包含以下字符:\ / : * ? " < > |,使用Python的 str.replace 方法来替换Excel文件的第1列中不能用于文件名的字符
于是,把这个注意事项加入到提示词中:
你是一个Python编程专家,要完成批量重命名的任务,具体步骤如下:
读取F盘的表格文件:pname.xlsx,获取到第2列的数据;
逐一读取文件夹“D:\lexfridman-podcast”里面的所有mp3文件的名称,然后和表格pname.xlsx第2列所有内容进行比对,如果和某个单元格内容一致,则读取这个单元格同一行的第1列单元格的内容,以此对文件标题进行重命名;
注意:每一步都要输出相关信息;
在Windows中,文件名不能包含以下字符:\ / : * ? " < > |,使用Python的 str.replace 方法来替换Excel文件的第1列中不能用于文件名的字符
这次给出的源代码运行成功:
import os
import pandas as pd
# 读取Excel文件
df = pd.read_excel('F:\\pname.xlsx', usecols=[0, 1], header=None)
# 获取文件夹中的所有文件
folder_path = 'D:\\lexfridman-podcast'
files = os.listdir(folder_path)
# 定义一个函数,它会将所有不能用于文件名的字符替换为下划线 "_"
def sanitize_filename(filename):
invalid_chars = '\\/:*?"<>|'
for char in invalid_chars:
filename = filename.replace(char, '_')
return filename
# 遍历文件夹中的每一个文件
for file in files:
# 检查文件是否是mp3文件
if file.endswith('.mp3'):
# 去掉".mp3"后缀,方便比较
file_without_extension = file[:-4]
# 查找这个文件名在Excel表格的第二列(Python中索引从0开始)中的位置
matching_rows = df[df[1] == file_without_extension]
# 如果找到了匹配的行
if not matching_rows.empty:
# 获取新的名字,并清理无效的字符
new_name = sanitize_filename(matching_rows.iloc[0, 0]) + ".mp3"
# 输出信息
print(f"Renaming {file} to {new_name}")
# 重命名文件
os.rename(os.path.join(folder_path, file), os.path.join(folder_path, new_name))
# 完成后输出信息
print("All files have been renamed.")