微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在成批读文件 - RAM的使用,从二进制文件中读取字符串

如何解决在成批读文件 - 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 举报,一经查实,本站将立刻删除。