【问题标题】:When processing a file, how do I obtain the current line number?处理文件时,如何获取当前行号?
【发布时间】:2011-08-22 03:23:59
【问题描述】:

当我使用下面的结构循环文件时,我还想要当前行号。

    with codecs.open(filename, 'rb', 'utf8' ) as f:
        retval = []
        for line in f:
            process(line)

是否存在类似的东西?

    for line, lineno in f:

【问题讨论】:

    标签: python line-numbers


    【解决方案1】:
    for lineno, line in enumerate(f, start=1):
    

    如果您遇到的 Python 版本不允许您为 enumerate 设置起始编号(此功能已在 Python 2.6 中添加),并且您想使用此功能,最好的解决方案可能是提供一个实现,而不是调整内置函数返回的索引。这是一个这样的实现。

    def enumerate(iterable, start=0):
        for item in iterable:
            yield start, item
            start += 1
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 Python2.6+,kindall 的回答涵盖了它

      Python2.5及更早的版本不支持枚举的第二个参数,所以需要使用类似这样的东西

      for i, line in enumerate(f):
          lineno = i+1
      

      for lineno, line in ((i+1,j) for i,j in enumerate(f)):
      

      除非你可以接受第一行是数字 0

      【讨论】:

      • 人们是否仍在使用 2.5 或更早版本,除非出于遗留支持原因?
      • @Karl,我今天早些时候为使用 2.4 的人回答了一个问题
      猜你喜欢
      • 2012-09-15
      • 2013-06-08
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多