我需要复制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)
第一个执行复制,第二个执行打印输出。
答案 0 :(得分:0)
问题是您在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:
...