处理文件时,我如何获取当前行号?

9
当我使用下面的结构循环遍历文件时,我也想要当前行号。
    with codecs.open(filename, 'rb', 'utf8' ) as f:
        retval = []
        for line in f:
            process(line)

这种类似的东西存在吗?
    for line, lineno in f:
2个回答

10
for lineno, line in enumerate(f, start=1):

如果你卡在一个不允许你设置enumerate起始编号的Python版本上(这个功能在Python2.6中添加),而你想使用这个功能,最好的解决方案可能是提供一个支持该功能的实现,而不是调整内置函数返回的索引。以下是这样的一种实现。

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

1
如果您正在使用Python2.6+,kindall的答案已经涵盖了它。
Python2.5及更早版本不支持enumertate的第二个参数,因此您需要使用类似于这样的东西。
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 Knechtel
@Karl,我今天早些时候为某人回答了一个使用2.4的问题。 - John La Rooy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接