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