簡體   English   中英

從打開的文件中獲取行號python

[英]Get line number python from opened file

我寫了這個小的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)

我修復了在腳本中發現的所有錯誤,但是目前我仍然看不到從文件中獲取行號的問題。 這與從文件對象中提取行號有些不同,因為如果我沒有記錯的話,文件不是一個對象,而是一個類。 有什么辦法可以拉輸入文件的行號嗎?

我認為我的很多困惑可能源於我對with陳述所做的工作,因此,如果有人也可以解釋我對那條線所做的確切工作,那將是很棒的。

您可以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是一種類型,因此您可以有效地隱藏內置函數(盡管很少使用...)。

您還可以像這樣使用列表結構的索引本身:

with open('a_file.txt','r') as f:
    lines = f.readlines()
readthese = [3,4,5]
for lineno in readthese:
    print(lines[1+lineno])

由於名單lines已經隱含包含的行號基於索引+ 1

如果文件太大而無法保存在內存中,則還可以使用:

readthese = [3,4,5]
f = open('a_file.txt','r')
for lineno in readthese:
    print(f.readline(lineno+1))
f.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM