迭代文件中的“行”,其中行分隔符为NULL

时间:2013-05-23 11:11:11

标签: python

我有文件/my/f,我将其打开为:

with open('/my/f') as data_file:
    for line in data_file:
        print(line)

我不想一次读取整个文件,我希望文件行上的隐式迭代器将ASCII的NUL(0x00,$'\ 0'等)视为行分隔符。

1 个答案:

答案 0 :(得分:1)

与建议的副本中的广泛解决方案不同的另一种方法是简单地继承File对象的迭代器,而不是迭代NUL。

class NulFile(file):
  buf=''
  bufsize=1024
  def __iter__(self):
    return self
  def next(self):
    while True:
      n = self.buf.find('\0')
      if n == -1:
        s = self.read(self.bufsize)
        if len(self.buf) == 0 and len(s) == 0:
          raise StopIteration
        elif len(s) == 0:
          break
        self.buf += s
      else:
        res = self.buf[:n]
        self.buf = self.buf[n+1:]
        return res
    res = self.buf
    self.buf = ''
    return res

但是,不是使用open(..)打开文件,而是使用NulFile(..)