Python复制C盘≥50KB的JPG文件到桌面备份时出现FileNotFoundError报错求助
错误原因
- 核心触发原因:调用
os.path.getsize(file)时仅传入了文件名,未拼接文件所在目录路径。os.walk()返回的files列表仅包含文件名本身,程序默认会在脚本运行的当前工作目录查找该文件,而目标文件实际存放在root变量对应的目录下,因此找不到文件抛出报错。 - 逻辑缺陷1:
os.path.getsize()返回的单位是字节,你需要匹配的50KB对应数值为50 * 1024 = 51200字节,原代码中>=50的判断阈值完全不符合需求。 - 逻辑缺陷2:代码使用了
time.sleep()但未导入time库,触发键盘中断时会抛出模块缺失错误。 - 兼容缺陷:遍历C盘时会遇到大量无访问权限的系统目录,未做异常捕获会导致程序中途崩溃。
- 体验缺陷:原后缀判断仅能匹配小写的.jpg/.jpeg,无法识别大写的.JPG/.JPEG格式文件。
修改方案
- 获取文件大小、执行复制操作时,统一使用
root和文件名拼接后的完整绝对路径 - 修正文件大小判断阈值为50KB对应的51200字节
- 补充导入
time依赖库 - 增加权限异常捕获逻辑,跳过无法访问的目录和文件
- 优化后缀判断逻辑,兼容大小写格式的后缀名
修正后完整代码
import os import shutil import time # 创建桌面Backup目录 dir_name = "Backup" dir_path = os.path.join(os.environ['USERPROFILE'], 'Desktop') backup_path = os.path.join(dir_path, dir_name) if not os.path.exists(backup_path): os.mkdir(backup_path) print(f"备份目录已创建:{backup_path}") try: scan_path = r'C:\\' extensions = (".jpg", ".jpeg") for root, dirs, files in os.walk(scan_path): try: for file in files: # 兼容大小写后缀判断 if file.lower().endswith(extensions): full_file_path = os.path.join(root, file) # 用完整路径获取文件大小 file_size = os.path.getsize(full_file_path) # 50KB换算为字节 if file_size >= 50 * 1024: print(f'匹配文件:{full_file_path},大小:{file_size/1024:.2f} KB') shutil.copy2(full_file_path, backup_path) print(f"已复制:{file}") except PermissionError: print(f"无权限访问目录:{root},已跳过") continue except FileNotFoundError: print(f"路径不存在:{root},已跳过") continue except KeyboardInterrupt: print("程序已手动终止!") time.sleep(5) os._exit(0)
内容的提问来源于stack exchange,提问作者Pycoder
相关产品推荐
相关产品推荐

