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

时间:2018-07-25 13:18:45

标签: python

我需要复制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)

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

1 个答案:

答案 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:
                 ...