Python中的readline的替代方法

时间:2018-11-29 16:51:59

标签: python readline

哪个是Python中readline的最佳替代选择?

我想逐行读取类似文件的对象。类似于文件的对象包含以下方法:

  • read():以当前偏移量从类似文件的对象中读取字节字符串。
  • seek():在文件状对象内寻找偏移量。
  • get_offset():将当前偏移量检索到类似文件的对象中。
  • get_size():检索文件状对象的大小。

我无法读取大于2GB的文件的全文,因此无法执行以下操作:

   for line in file_object.read():
      dostuff(line)

我测试了一些逐行读取的方法:对于很小的文件,这些方法很好,但是对于很大的文件,它们是如此之慢。无论如何,它们比File readline()慢得多。 这是我尝试的示例:

text = ''
while True:
  char = file_object.read(1)
  if char == '':
    return ''
  text += buffer + char
  if char == '\n':
    pos_newline = text.find('\n')
    current_offset += pos_newline + 1
    buffer = text[pos_newline + 1:]
    line = text[:pos_newline]
    return line

我还尝试一次读取10/50/100个字符。

我只能使用标准库。

编辑:“文件状”不可重复。

1 个答案:

答案 0 :(得分:2)

您可以使用

逐块阅读
while True:
    chunk = f.read(CHUNK_SIZE)
    if chunk == '':
        # we've reached the end
        break
    # process chunk

但是很可能您拥有的任何类似文件的对象都可以直接迭代以获取行。

for line in f:
    # I don't have readline, but I work anyway hee hee!