Python中shutil复制文件时会在本地做缓存吗?

在本机上写了个 py 文件用 shutil 实现文件拷贝,当源文件和目标地址都在挂载的服务器共享盘上时,发现速度很慢很慢,试了一下耗时约是用 dos copy 命令的 4 倍,是否因为 shutil 需要先读取数据到本机,然后再写入目标地址的缘故?
Python中shutil复制文件时会在本地做缓存吗?

3 回复

不会。shutil模块的文件复制操作(如shutil.copy, shutil.copy2, shutil.copyfile)是直接的、流式的I/O操作,不会在本地文件系统之外创建任何中间缓存。

它的工作原理是打开源文件,读取数据块(默认缓冲区大小是16KB),然后立即写入目标文件。这个过程只是在内存中有一个小的缓冲区用于数据传输,但数据不会持久化到磁盘上的某个“缓存”位置。复制完成后,这个内存缓冲区就被释放了。

你可以把它想象成用open(source, 'rb')open(destination, 'wb')手动读写文件,shutil只是帮你封装好了这个过程,并处理了一些边缘情况(如权限、元数据等)。

所以,不用担心它会占用额外的磁盘空间做缓存。


是的。

def copyfileobj(fsrc, fdst, length=16*1024):
“”“copy data from file-like object fsrc to file-like object fdst”""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)

看源代码的话目测是的

回到顶部