使用Python复制文件后出现文件损坏的问题及修复方案
图片备份后源文件损坏的排查与解决
问题场景
使用以下Python代码执行文件备份操作:
import os import shutil def backup_files(src_dir, dest_dir): for root, dirs, files in os.walk(src_dir): for file in files: src_file = os.path.join(root, file) dest_file = os.path.join(dest_dir, file) shutil.copy2(src_file, dest_file) src_dir0 = 'A:\\AI\\output' src_dir1 = 'A:\\AI\\prompt' dest_dir0 = 'D:\\AI 备份\\output' dest_dir1 = 'D:\\AI 备份\\prompt' if not os.path.exists(dest_dir0): os.makedirs(dest_dir0) if not os.path.exists(dest_dir1): os.makedirs(dest_dir1) backup_files(src_dir0, dest_dir0) backup_files(src_dir1, dest_dir1) print("备份完成!")
运行后出现异常:
- A盘源目录下的图片无法用「照片」应用打开,提示格式不支持,但磁盘占用无变化,父文件夹仍显示缩略图(推测为Windows缩略图缓存未清除)
- 已尝试重启电脑、检查代码(无报错),问题未解决
排查与解决步骤
1. 验证备份文件状态
先检查D盘备份目录中的图片是否能正常打开:
- 若备份文件可正常打开:说明源文件在备份前已损坏,或备份过程中被其他进程(如AI生成工具)修改
- 若备份文件也无法打开:说明复制过程中文件已损坏,需修复代码逻辑
2. 修复备份代码的核心缺陷
原代码会将源目录所有子文件夹中的文件直接复制到目标目录根目录,同名文件会被反复覆盖,可能引发文件写入异常。修改后的代码保留源目录层级结构,避免覆盖问题:
import os import shutil def backup_files(src_dir, dest_dir): for root, dirs, files in os.walk(src_dir): # 保留源目录的层级结构 relative_path = os.path.relpath(root, src_dir) target_dir = os.path.join(dest_dir, relative_path) os.makedirs(target_dir, exist_ok=True) for file in files: src_file = os.path.join(root, file) dest_file = os.path.join(target_dir, file) # 跳过已存在的文件(可根据需求删除此判断) if not os.path.exists(dest_file): shutil.copy2(src_file, dest_file) src_dir0 = 'A:\\AI\\output' src_dir1 = 'A:\\AI\\prompt' dest_dir0 = 'D:\\AI 备份\\output' dest_dir1 = 'D:\\AI 备份\\prompt' backup_files(src_dir0, dest_dir0) backup_files(src_dir1, dest_dir1) print("备份完成!")
3. 修复损坏的图片文件
- 若备份文件完好:直接将备份目录中的对应文件复制回源目录,覆盖损坏文件
- 若备份文件也损坏:使用专业图片修复工具(如Stellar Repair for Photo)尝试修复PNG文件
- 检查磁盘健康:右键A盘→「属性」→「工具」→「检查」,扫描并修复磁盘错误
4. 清除Windows缩略图缓存
按下Win + R输入cleanmgr,打开磁盘清理工具,选择系统盘后勾选「缩略图」,执行清理即可消除缓存导致的视觉误导。
内容的提问来源于stack exchange,提问作者Kreanto Zhou
相关产品推荐
相关产品推荐

