当使用 shutil.copy()
复制大文件时,您看不到操作的进展情况。
我整理了一些有用的东西 - 它使用一个简单的 ProgressBar 类(它简单地返回一个简单的 ASCII 进度条,作为一个字符串),以及一个 open().read()
循环和 .write()
进行实际的复制。它使用 sys.stdout.write("\r%s\r"% (the_progress_bar))
显示进度条,这有点老套,但它有效。
您可以看到代码(在上下文中)on github here
是否有任何内置模块可以更好地做到这一点?是否可以对此代码进行任何改进?
最佳答案
两件事:
- 我会让默认的 block 大小比 512 大 很多。我会从 16384 开始,也许更多。
- 为了模块化,最好让
copy_with_prog
函数不输出进度条本身,而是调用一个回调函数,以便调用者可以决定如何显示进度。
也许是这样的:
def copy_with_prog(src, dest, callback = None):
while True:
# copy loop stuff
if callback:
callback(pos, total)
prog = ProgressBar(...)
copy_with_prog(src, dest, lambda pos, total: prog.update(pos, total))
关于python - 如何使用进度条在 Python 中复制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/274493/