如何从复制.zip文件中获取进度



我需要复制zip文件,并希望打印进度。我已经设置好了所有内容,以便它开始复制文件并输出进度。问题是,它似乎在任何时候都没有停止。输出远远超过100%,我最终扼杀了这个程序。

这是我的代码:

def copyfileobjprogress(fsrc, fdst, callback, length=16 * 1024):
copied = 0
MAX = os.path.getsize(default_folder)
print(MAX)
while True:
with open(fsrc, 'rb') as s:
with open(fdst, 'wb') as d:
buf = s.read(length)
if not buf:
break
d.write(buf)
copied += len(buf)
callback(copied, MAX)

def percentage(copied, MAX):
print(copied / MAX *100)

第一个进行复制,第二个打印输出。

问题是在while True循环中一次又一次地执行复制。你实际做的是无休止地重复下面的代码块:

with open(fsrc, 'rb') as s:
with open(fdst, 'wb') as d:
buf = s.read(length)
if not buf:
break
d.write(buf)
copied += len(buf)
callback(copied, MAX)

这意味着您打开2个文件,从头开始读取输入内容,所以存储在buf中的读取结果不是空的,所以您不会中断循环,然后写入输出文件,再次打开2个文档,读取输入的内容。。。。

相反,你可以先打开文件,然后在循环中读写,即

with open(fsrc, 'rb') as s:
with open(fdst, 'wb') as d:
while True:
...

最新更新