Python文件复制操作中遇到的问题与解决方法
之前写的一个模块,运行一点问题都没有,今天某次打开以后,莫名其妙报错
进去看了下,原来是文件复制这这块出了问题
代码意图是将当前文件夹下的 screenshot.png 复制到 backup 目录中,并且命名加时间。
代码为:
orifilename = './screenshot.png'
destfilename = "./backup/screenshot_{0}.png".format(datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')) shutil.copyfile(orifilename, destfilename)
现在是 shutil.copyfile 这个报错,报 destfilename 文件不存在...
FileNotFoundError: [Errno 2] No such file or directory: './backup/screenshot_2018_01_19_22_44_07.png'
也看了源代码,
with open(src, 'rb') as fsrc:
with open(dst, 'wb') as fdst:
copyfileobj(fsrc, fdst)
源代码里主要是这里第二行报错,
复制文件,必须要源文件存在,为什么会是这样设计...
而且更诡异的是,之前运行一直良好,目标文件夹一直都有备份的文件。就今天才会报错...
我已经混乱了....
可能这个问题比较 Low,但是大家还是帮我看看吧...
Python文件复制操作中遇到的问题与解决方法
./backup 这个文件夹是不是不存在
在Python里复制文件,最直接的方法是shutil.copy()和shutil.copy2()。copy()只复制内容,copy2()还会尽可能保留元数据(如修改时间)。如果目标目录不存在,这两个函数都会报错,所以最好先用os.makedirs()创建目录。
import shutil
import os
def copy_file_safe(src, dst):
"""安全复制文件,自动创建目标目录"""
try:
# 创建目标目录(如果不存在)
os.makedirs(os.path.dirname(dst), exist_ok=True)
# 复制文件并保留元数据
shutil.copy2(src, dst)
print(f"成功复制: {src} -> {dst}")
except FileNotFoundError:
print(f"错误:源文件不存在 {src}")
except PermissionError:
print(f"错误:没有权限访问 {src} 或 {dst}")
except Exception as e:
print(f"复制失败: {e}")
# 使用示例
copy_file_safe('/path/to/source.txt', '/path/to/destination/folder/target.txt')
常见坑点:Windows上复制正在被其他程序打开的文件可能会失败,需要处理权限问题;复制大文件时用shutil.copyfileobj()可以控制缓冲区大小;跨设备复制符号链接时要注意shutil.copy()会跟随链接,而shutil.copy2(..., follow_symlinks=False)可以保留链接本身。
简单总结:用shutil.copy2()并提前创建目录就能解决大部分问题。
if not os.path.exists(os.path.split(dst)[0]): os.makedirs(os.path.split(dst)[0])
- 确认"backup"文件夹是否存在;
2. 确认代码运行的当前目录“./”是否正确。
刚一步一步调试且观察了文件夹,另外一个同事写的删除备份文件夹的程序被提前调用…导致我这边 backup 文件夹被删了。一直以为这个 backup 文件夹铁定在的。文件夹就被新建了一次…
这个锅 python 不背,操作系统的锅,顶多是 shutil 的锅
是我自己程序的问题,昨晚被这个 bug 搞懵逼了,谢谢大家。

