python - 使用进度指示器在 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 中使用命令获得预期的结果dd
,progress
不幸的是我正在工作的系统不支持progress
作为dd
命令的状态标志。我在尝试运行 dd 命令时得到了这个。
dd: invalid status flag: `progress'
这是我的 dd 命令:
dd if=/dev/zero of=temp_file status=progress count=1M bs=5120
解决方案
当然,这项工作的最佳工具是pv
. 如果您没有全局安装它的权限,您仍然可以仅在您的用户目录中从源代码(不带 sudo)构建和安装它,因为它是使用 autoconf/automake 安装的,所以您只需要在制作和安装之前./configure
运行。--prefix=$HOME/bin
但是,如果您真的想编写 Python 脚本,则需要考虑两部分:进度条本身和进度条的数据。
对于进度条本身,@Mntfr 已经提到了一个涵盖此问题的问题。
对于进度条信息,您将需要一些方法来跟踪到目前为止已写入的数据量。因此,您需要一次写入较小的数量(例如,在更新进度条之前只写入 5MB),或者您需要异步跟踪输出文件的大小,并相应地更新您的进度条。第一种方法总体上可能较慢(因为它涉及开始和停止编写),但第二种方法可能更难(因为它需要脚本中的异步性,这在 Python 中实现并不是很有趣,除非您只编写两个脚本并运行他们并排)。这两个想法应该让您开始了解如何实现您正在寻找的东西。
推荐阅读
- python - 在 django (python) 中生成代码的更好方法
- java - 是否可以在 Java 中将一个字符串输入转换为一行中的整数列表?
- definition - 如何在不弄乱表的情况下更新列定义?
- python - 我如何使用 Python gRPC 对流式消息进行计时
- firebase - 检查在 Firestore 中在线的用户列表
- javascript - TypeError:未定义不是对象(评估'_reactNativeReanimated.EasingNode.linear')
- uber-api - 未找到服务器令牌
- javascript - 如何从 Typescript 单元测试中导入 Javascript
- javascript - $.trim().val 不是函数
- list - 如何在flutter / Dart的List中的where子句中运行IN条件?