0

私は次のように開く file を持っています/my/f:

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

ファイル全体を一度に読み取りたくないので、ファイル行の暗黙的なイテレータで、ASCII の NUL (0x00、$'\0' など) を行区切り記号と見なしたいと考えています。

4

1 に答える 1

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

于 2013-05-23T11:43:16.993 に答える