如何解决在成批读文件 - RAM的使用,从二进制文件中读取字符串
yield
是python中用于生成器表达式的关键字。这意味着,下一次调用函数(或迭代上),执行将在确切点启动备份它离开上次你的说法。这两个功能相同的行为;
唯一的区别在于,第一个使用比所述第二一点点更调用堆栈空间。然而,第一个是更可重复使用的,所以从程序设计的角度来看,第一个实际上是更好。
编辑:另外,另外一个区别是,第一个将停止读取一旦所有的数据已被读取,它应该的方式,但第二个将只停一次,要么f.read()
或process_data()
抛出异常。为了让第二个能正常工作,你需要对其进行修改,如下所示:
f = open(file, 'rb')
while True:
piece = f.read(1024)
if not piece:
break
process_data(piece)
f.close()
解决方法
我想读Python中的大文件时,了解在这个方法内存使用率的差异。
第1版,发现这里的计算器:
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"
。使用这样的方法,不可能在任何片段中检测到整个字符串。
有没有一种方法来读取数据块文件 - 但不知何故关心这样的字符串?
任何帮助或想法是值得欢迎的,
招呼!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。