使用os.rename重命名文件失败,报WindowsError[Error2]错误
解决Python批量重命名文件时的「找不到文件」错误
嘿,我来帮你搞定这个文件重命名的问题!你遇到的WindowsError: [Error 2]本质原因很简单:你用os.listdir()拿到的只是纯文件名,不是完整的文件路径。当你直接调用os.rename(x, ...)时,Python会在当前的工作目录(不是你指定的S:\Shared\Santa Rosa)里找这些文件,自然会找不到啦。
下面给你两种靠谱的解决方法,还附带了更安全的细节处理:
方法一:拼接完整文件路径(推荐)
这种方法不用切换工作目录,直接通过os.path.join把目标目录和文件名拼接成完整路径,最稳妥:
import os # 定义目标目录 target_dir = r"S:\Shared\Santa Rosa" # 遍历目录下的所有文件/文件夹 for filename in os.listdir(target_dir): # 只处理以__开头的文件(避免误改文件夹或不需要重命名的文件) if filename.startswith('__') and os.path.isfile(os.path.join(target_dir, filename)): # 拼接原文件和新文件的完整路径 old_full_path = os.path.join(target_dir, filename) # 只替换开头的__(第三个参数1表示只替换一次,防止误改文件名中间的下划线) new_filename = filename.replace('__', '', 1) new_full_path = os.path.join(target_dir, new_filename) # 可以先打印预览,确认没问题再执行rename # print(f"重命名:{old_full_path} -> {new_full_path}") os.rename(old_full_path, new_full_path)
方法二:先切换到目标目录再操作
如果你觉得拼接路径麻烦,也可以先切换到目标目录,再直接用文件名操作:
import os from contextlib import chdir target_dir = r"S:\Shared\Santa Rosa" # 使用上下文管理器切换目录,退出后自动回到原工作目录 with chdir(target_dir): for filename in os.listdir(): if filename.startswith('__') and os.path.isfile(filename): new_filename = filename.replace('__', '', 1) # 预览用print,确认后换成os.rename # print(f"重命名:{filename} -> {new_filename}") os.rename(filename, new_filename)
额外的安全建议
- 先备份文件:批量操作前最好先复制一份目标文件到其他目录,避免误操作导致文件丢失
- 先预览再执行:把
os.rename换成print语句,先确认所有重命名的路径和文件名都是正确的,再真正执行重命名 - 过滤文件类型:如果只需要处理PDF文件,可以再加个判断
if filename.endswith('.pdf'),进一步缩小操作范围
内容的提问来源于stack exchange,提问作者geoJshaun
相关产品推荐
相关产品推荐

