python中的EOF等价方法?

2024-04-23 19:47:19 发布

您现在位置:Python中文网/ 问答频道 /正文

python中是否有任何等价方法可替换C中EOF

假设,文件包含3行。我想迭代文件直到文件结束。

>>> fp.seek(0)
>>> with open(file,'rb') as openfileobject:
               for chunk in iter(partial(openfileobject.read,1024),''):
                           openfileobject.read()

以上代码处于无限循环中。我知道下面的代码会帮我解决这个问题。

^{pr2}$

但是,我愿意手动迭代文件指针。这就是为什么我在python中搜索eof等价物的原因。


Tags: 文件方法代码forreadaswithseek
1条回答
网友
1楼 · 发布于 2024-04-23 19:47:19

你的代码有几处错误。最直接的错误是您的sentinel值需要是bytes对象,而不是str,因为您是以二进制模式打开文件的。这就是它永远循环的原因。所以使用b''

with open(file,'rb') as openfileobject:
    for chunk in iter(partial(openfileobject.read,1024), b''):
        openfileobject.read()

您需要使用b'',因为两个参数iter的工作方式是,该值需要是您传入的函数返回的值。 当file对象用完时,fileobject.read函数将返回b'',Python处理EOF本身。因此,出于所有意图和目的,您应该只关心b''。如果fileobject在测试模式下是open,那么fileobject.read将返回一个''字符串对象,而不是bytes对象。在

但实际上,您只会以这种方式进行一次迭代,因为在第一次迭代中,您调用openfileobject.read,它的读数直到EOF为止。chunk实际上是您需要的<;=1024字节的块!在

所以你真正想要的是:

^{2}$

根据评论进行编辑:

所以,我想你想要的do_something是这样的:

with open(file,'rb') as openfileobject:
    for chunk in iter(partial(openfileobject.read,1024), b''):
        for line in chunk.splitlines() # this strips the new-lines
            print(line) # for example, print...

但请记住,当您以“chunks”形式读取文件时,您的行将被分割(除非这些行以chunksize开头对齐…)

相关问题 更多 >