从打开的文件中获取行号python

时间:2015-05-16 02:27:14

标签: python parsing with-statement

我编写了这个小的Python 2.7原型脚本,尝试从格式化的输入文件中读取指定的行(在本例中为3,4,5行)。我将在稍后解析数据并对输入进行操作以构造其他文件。

来自sys import argv

def comparator (term, inputlist):
    for i in inputlist:
        if (term==i):
            return True
    print "fail"
    return False

readthese = [3,4,5]

for filename in argv[1:]:
    with open(filename) as file:
        for line in file:
            linenum=#some kind of way to get line number from file
            if comparator(linenum, readthese):
                print(line)

我修复了我在脚本中发现的所有错误,但目前我还没有看到从文件中获取行号。它与从文件对象中提取行号有点不同,因为如果我没有弄错,则文件是一个类而不是对象。有没有我可以拉出输入文件的行号?

我认为我的很多困惑可能源于我对我的陈述所做的事情,所以如果有人也可以解释我在这条线路上做了多少才会很棒。

2 个答案:

答案 0 :(得分:6)

你可以只enumerate文件对象,因为enumerate适用于任何可迭代的...

for line_number, line in enumerate(file):
    if comparator(line_number, line):
        print line

注意,此索引从0开始 - 如果您希望第一行为1,只需告诉enumerate您要启动的位置:

for line_number, line in enumerate(file, 1):
    ...

注意,我建议不要使用名称file - 在python2.x上,file是一种类型,因此您可以有效地遮蔽内置(尽管很少使用) ...)。

答案 1 :(得分:0)

你也可以像这样使用列表结构的索引:

time.sleep(0.1)

由于with open('a_file.txt','r') as f: lines = f.readlines() readthese = [3,4,5] for lineno in readthese: print(lines[1+lineno]) 列表已隐式包含基于索引+ 1

的行号

如果文件太大而无法容纳在内存中,您还可以使用:

lines