文件夹里面有一些文件标题名称前面是空格,要批量删除。
可以在ChatGPT中输入提示词如下:
你是一个Python编程专家,要完成一个批量重命名文件标题的任务,具体步骤如下:
打开本地电脑文件夹:E:\National Geographic Kids
读取文件夹里面的所有mp4文件;
如果文本标题中开头第一个字符中是空格,则将文件标题中的这个空格删除掉;
注意:每一步都要输出信息
如果删除空格后的文件标题和文件夹中其他标题名重复,则在文件标题后加上一个“new”,以便进行区别;
程序运行后,大部分成功,一部分没成功,错误信息如下:
处理文件: Cats vs. Dogs Read Aloud.mp4
发现开头空格: Cats vs. Dogs Read Aloud.mp4
重命名为:Cats vs. Dogs Read Aloud.mp4
Traceback (most recent call last):
File "d:\Python\deletesapceinfilename.py", line 25, in
os.rename(os.path.join(folder_path, filename), os.path.join(folder_path, new_filename))
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'E:\\National Geographic Kids\\ Cats vs. Dogs Read Aloud.mp4' -> 'E:\\National Geographic Kids\\Cats vs. Dogs Read Aloud.mp4'
ChatGPT的回复是:
你的系统把 "Cats vs. Dogs Read Aloud.mp4" 和 " Cats vs. Dogs Read Aloud.mp4" 当成是同一个文件,即使我们在文件名中间加入了"_temp"。这可能是因为在 Windows 系统中,文件名的开头和结尾的空白字符会被自动忽略。
一个可能的解决方案是,我们可以先把文件移动到一个临时文件夹,然后再移动回原来的文件夹并重命名。以下是一种可能的实现:
import os
import shutil
# 定义文件夹路径和临时文件夹路径
folder_path = 'E:\\National Geographic Kids'
temp_folder_path = 'E:\\National Geographic Kids\\temp'
# 如果临时文件夹不存在,创建临时文件夹
if not os.path.exists(temp_folder_path):
os.makedirs(temp_folder_path)
# 读取文件夹里的所有文件并存储文件名
filenames = [f for f in os.listdir(folder_path) if f.endswith('.mp4')]
# 遍历文件名
for filename in filenames:
print(f'处理文件:{filename}')
# 检查文件名开头是否有空格
if filename.startswith(' '):
print(f' 发现开头空格:{filename}')
new_filename = filename.lstrip() # 删除开头空格
# 检查新文件名是否已存在
if new_filename in filenames:
print(f' 文件名冲突,添加"new"')
new_filename = new_filename.rsplit('.', 1)[0] + 'new.' + new_filename.rsplit('.', 1)[1]
# 将文件移动到临时文件夹并重命名
shutil.move(os.path.join(folder_path, filename), os.path.join(temp_folder_path, new_filename))
# 将文件从临时文件夹移回原文件夹
shutil.move(os.path.join(temp_folder_path, new_filename), os.path.join(folder_path, new_filename))
print(f' 重命名为:{new_filename}')
else:
print(' 文件名未改变')
# 删除临时文件夹
os.rmdir(temp_folder_path)
print('所有文件处理完成')
运行修改后的Python代码,成功!