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

2024-10-06 11:24:40 发布

您现在位置: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)

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


Tags: 文件内容defaswithcallbackopenzip
1条回答
网友
1楼 · 发布于 2024-10-06 11:24:40

问题是在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:
                 ...

相关问题 更多 >