我想了解在 python 中读取大文件时这种方法在 RAM 使用方面的区别。
版本 1,在 stackoverflow 上找到:
def read_in_chunks(file_object, chunk_size=1024):
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
f = open(file, 'rb')
for piece in read_in_chunks(f):
process_data(piece)
f.close()
版本 2,我在找到上面的代码之前使用了这个:
f = open(file, 'rb')
while True:
piece = f.read(1024)
process_data(piece)
f.close()
该文件在两个版本中都被部分读取。并且可以处理当前的一块。在第二个示例中,piece
在每个周期都获取新内容,所以我认为这可以在不将完整文件加载到内存的情况下完成这项工作。
但我真的不明白是什么yield
,而且我很确定我在这里做错了。谁能给我解释一下?
除了使用的方法之外,还有其他事情让我感到困惑:
我读的那篇文章的内容是由上面例子中的块大小定义的,1KB。但是...如果我需要在文件中查找字符串怎么办?像"ThisIsTheStringILikeToFind"
什么?
根据字符串在文件中出现的位置,可能是一段包含该部分"ThisIsTheStr"
- 下一段将包含"ingILikeToFind"
. 使用这种方法不可能检测到任何片段中的整个字符串。
有没有办法分块读取文件 - 但不知何故关心这些字符串?