当前位置: 首页 > 面试题库 >

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

曾鸿振
2023-03-14
问题内容

我想读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"。使用这样的方法,不可能在任何片段中检测到整个字符串。

有没有一种方法来读取数据块文件 - 但不知何故关心这样的字符串?

任何帮助或想法是值得欢迎的,

招呼!


问题答案:

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()


 类似资料:
  • 问题内容: 我正在尝试从URLConnection读取二进制文件。当我使用文本文件对其进行测试时,它似乎可以正常工作,但对于二进制文件则不能。发送文件时,我在服务器上使用以下mime类型: 但是到目前为止,似乎没有任何效果。这是我用来接收文件的代码: 问题答案: 我就是这样

  • 所以。。。我需要从.pkl文件中读取并导入图像数据集。图像存储为“二进制blob”。一旦完成了,我需要将它们转换成字节格式,这样我就可以通过Google的CloudVision运行它们。我设法在Linux虚拟机上打开了该文件(花了几天时间试图让它在Windows上工作…)。但现在我似乎无法将这个“二进制斑点”转换为我可以使用的实际图像。。。 下面是一个“二进制blob”: \1\x0 0 0 0\

  • 问题内容: 我有一个较长的无符号整数文件(每个64位,0.47GB文件),需要读取并存储在数组中。经过一番思考之后,由于Java中的所有内容都已签名(请纠正我,请纠正我),因此我长时间使用了该类型,我想不出更好的选择了。无论如何,仅需对数组进行排序,因此原始数字的精确值并不是最重要的。我们应该测量排序算法的效率,仅此而已。但是,当我实际要读取文件时(在下面的代码中),我遇到了砖墙。 它会一直持续下

  • 问题内容: 我发现用Python读取二进制文件特别困难。你能帮我个忙吗?我需要读取此文件,在Fortran 90中,该文件很容易被读取 详细而言,文件格式为: 如何使用Python阅读?我尝试了一切,但没有成功。我是否有可能在python中使用f90程序,读取此二进制文件,然后保存需要使用的数据? 问题答案: 读取二进制文件内容,如下所示: 然后使用struct.unpack “解压缩”二进制数据

  • 问题内容: 这一定很明显,但我无法弄清楚。我为此花了将近一整天。我很乐意给减轻我体重的人买啤酒。 这是我的代码。我看到字节数组大小不合适,但是我找不到正确的大小。除此之外,内容也不是不正确的。似乎只有文字字符可以。 似乎从二进制文件中删除数据确实很痛苦,我真的很沮丧。 还有一件事:文件内容不是文本,可以是图片,视频或pdf之类的东西。 问题答案: 如果你正在读一个二进制文件,你应该 不 尝试把它当

  • 问题内容: 我正在尝试在Python中读取BMP文件。我知道前两个字节表示BMP公司。接下来的4个字节是文件大小。当我执行时: 我得到: ValueError:以10为底的int()的无效文字:’F#\ x13’ 我想做的是将这四个字节读取为整数,但是Python似乎将它们读取为字符并返回一个字符串,该字符串无法转换为整数。如何正确执行此操作? 问题答案: 该方法将字节序列作为字符串返回。要将字符