生成器从文件中读取行

时间:2017-09-05 20:29:11

标签: python file generator

使用生成器函数从文件中读取行是否有任何优势?我问这个是因为我在剧本中看到了类似的东西:

with open(file, 'r') as f:
    liter = (l.rstrip("\r\n") for l in f)  # <generator object <genexpr> at 0x10617c728>
    for line in liter:

这种方法会比简单的块更好(或在什么情况下):

with open(file, 'r') as f:
    for line in f:
        line = line.rstrip("\r\n")

1 个答案:

答案 0 :(得分:1)

第一种方法并没有带来太多:

  • 它不是一个完整的理解语法,因为它有一个循环
  • 它不是一个完整的循环代码(所以初学者很难理解它)

如果您可以在一行中编写代码而没有循环,那将会有兴趣:

\r

(创建一个非空行列表,也就是说,作为旁注,你不必从行尾删除\r,因为文本模式已经这样做了,除非是当然有超过1 lambda个字符,这是非标准的)

或者在stripped_lines = lambda f : (l.rstrip("\n") for l in f) 中,您将使用整个代码以避免忘记删除那些该死的换行符:

for l in stripped_lines(f):
   ...

然后

.op

第二种方法更清晰,更简单如果你必须使用一个循环(如果你有副作用调用,建议它避免理解并改用循环)