【问题标题】:Iterate over "lines" in a file, where line-separator is NUL [duplicate]遍历文件中的“行”,其中行分隔符为 NUL [重复]
【发布时间】:2013-05-23 11:11:11
【问题描述】:

我有文件/my/f,我打开它:

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

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

【问题讨论】:

  • 您可以尝试通过chr(0) 对字符串进行split 处理,然后对其进行迭代。
  • 旁注:正确的单词应该是以空字符结尾的record。根据定义,一行是以换行符结尾的记录,仅在文本文件中才有意义。
  • 同意,记录是一个更好的词。不同意“null”,ASCII 说它是 NUL。 "null" 已重载。

标签: python


【解决方案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(..)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2012-03-03
    • 2012-09-15
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多