私は次のように開く file を持っています/my/f
:
with open('/my/f') as data_file:
for line in data_file:
print(line)
ファイル全体を一度に読み取りたくないので、ファイル行の暗黙的なイテレータで、ASCII の NUL (0x00、$'\0' など) を行区切り記号と見なしたいと考えています。
私は次のように開く file を持っています/my/f
:
with open('/my/f') as data_file:
for line in data_file:
print(line)
ファイル全体を一度に読み取りたくないので、ファイル行の暗黙的なイテレータで、ASCII の NUL (0x00、$'\0' など) を行区切り記号と見なしたいと考えています。
提案された複製の広範な解決策以外の別の方法は、単純に 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(..)
。