9

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

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

是否存在类似的东西?

    for line, lineno in f:
4

2 回答 2

10
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
于 2011-05-10T03:44:40.927 回答
1

如果您使用的是 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

于 2011-05-10T03:50:16.513 回答