【发布时间】:2016-12-27 18:07:31
【问题描述】:
更新问题
我知道如何使用 python 从文件 http://docs.python.org/3.5/library/hashlib.html#hash-algorithms 创建 md5 哈希。 我也知道如何逐行读取文本文件。 但是我的文件可能会变大,并且从头到尾读取两次文件是低效。我想知道是否可以只从磁盘读取一次数据,并且像在流/管道中一样,智能地组合这两个任务。可能是这样的:
- 初始化 md5
- 以二进制模式打开文件
- 将一大块数据(例如 buffer_size=65536)读入缓冲区
- 用刚刚读取的块更新 md5
- 将缓冲区提供给另一个流以继续处理数据
- 使用TextIOWrapper(?)再次读取数据,但这次是文本
- 逐行阅读文本。当缓冲区被消耗时,向底层请求更多数据,直到 EOF。它会读取更多的二进制数据,更新 md5,提供新的缓冲区......我可以继续逐行读取(这就像:从第 3 步重复直到 EOF)
- 在 EOF 上,我已经逐行处理了我的所有文本,并拥有 md5
目标是通过将二进制 md5 计算和基于文本的处理智能地结合在同一个文件上来提高效率,只需从磁盘读取一次(而不是两次)(而不是两次)(大)文件。
我希望这能更好地解释它。再次感谢您的帮助。
于尔根
【问题讨论】:
-
这个页面我知道并且我以前读过它。但是它到底在哪里描述了我想使用我为 md5 读取的相同缓冲区,在那里逐行读取文本?
-
看我的问题不是md5。我的问题是a)从二进制文件中读取缓冲区b)对缓冲区做一些事情c)使用该缓冲区(这是字节而不是字符串)逐行读取那里的文本。你没有一个可行的例子吗?