从python中的文件中读取单个字符?

And*_*ndy 2 python file-io

我的问题是,如果除了下面有任何其他方式一次迭代一个文件一个字符?

with open(filename) as f:
  while True:
    c = f.read(1)
    if not c:
      print "End of file"
      break
    print "Read a character:", c
Run Code Online (Sandbox Code Playgroud)

由于没有像Java中那样检查是否有东西可读的功能,因此还有其他方法.此外,在示例中,当变量c到达文件末尾时,它会是什么?感谢任何人的帮助.

Gar*_*tty 8

另一种选择是使用itertools.chain.from_iterable():

import itertools

with open("test.txt") as f:
    for c in itertools.chain.from_iterable(f):
        print(c)
Run Code Online (Sandbox Code Playgroud)

chain.from_iterable创建一个iterable,它返回给定iterable中第一个iterable的元素,直到它耗尽,然后进入下一个iterable,直到所有的iterables都用完为止.通常这用于展平列表列表,但在这种情况下,它允许您忽略行.

这是否真的比嵌套循环更好是另一回事(它会更快一些,但这不太重要),但值得一提.


orl*_*rlp 7

这是一种方式:

with open(filename) as f:
    for line in f:
        for c in line:
            pass
Run Code Online (Sandbox Code Playgroud)

或者这个呢?

with open(filename) as f:
    for c in f.read():
        pass
Run Code Online (Sandbox Code Playgroud)

  • +1.第一种解决方案通常更好,因为后者可能会导致非常大的文件(内存不足)出现问题. (2认同)