首页 > 解决方案 > 使用进度指示器在 python 中创建大文件

问题描述

我需要创建一些大文件并在 python 中显示写入进度。目前我正在使用此代码来创建文件。但我无法显示进度。PythonWrite函数返回操作结束时实际写入的数字write。但我需要知道每秒写入多少字节。

oneGB = 1024*1024*1024 # 1GB
with open('large_file', 'wb') as fout:
    bytes_number = fout.write(os.urandom(oneGB))
    print(bytes_number)

我知道我可以在 linux 中使用命令获得预期的结果ddprogress不幸的是我正在工作的系统不支持progress作为dd命令的状态标志。我在尝试运行 dd 命令时得到了这个。

dd: invalid status flag: `progress'

这是我的 dd 命令:

dd if=/dev/zero of=temp_file status=progress count=1M bs=5120

标签: pythonlinuxwritefiledd

解决方案


当然,这项工作的最佳工具是pv. 如果您没有全局安装它的权限,您仍然可以仅在您的用户目录中从源代码(不带 sudo)构建和安装它,因为它是使用 autoconf/automake 安装的,所以您只需要在制作和安装之前./configure运行。--prefix=$HOME/bin

但是,如果您真的想编写 Python 脚本,则需要考虑两部分:进度条本身和进度条的数据。

对于进度条本身,@Mntfr 已经提到了一个涵盖此问题的问题。

对于进度条信息,您将需要一些方法来跟踪到目前为止已写入的数据量。因此,您需要一次写入较小的数量(例如,在更新进度条之前只写入 5MB),或者您需要异步跟踪输出文件的大小,并相应地更新您的进度条。第一种方法总体上可能较慢(因为它涉及开始和停止编写),但第二种方法可能更难(因为它需要脚本中的异步性,这在 Python 中实现并不是很有趣,除非您只编写两个脚本并运行他们并排)。这两个想法应该让您开始了解如何实现您正在寻找的东西。


推荐阅读