我编写了这个小的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)
我修复了我在脚本中发现的所有错误,但目前我还没有看到从文件中获取行号。它与从文件对象中提取行号有点不同,因为如果我没有弄错,则文件是一个类而不是对象。有没有我可以拉出输入文件的行号?
我认为我的很多困惑可能源于我对我的陈述所做的事情,所以如果有人也可以解释我在这条线路上做了多少才会很棒。
答案 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