搜索文本文件并打印行号

1 投票
3 回答
1966 浏览
提问于 2025-04-18 07:03

你怎么让你的函数找到文本文件中出现某个单词的行,并打印出对应的行号呢?

我需要打开一个包含段落的文本文件,然后在这个段落中搜索特定的单词,最后打印出这些单词所在的具体行号。

这是我目前的进展。

words = [network, devices, computer, fire, local, area, room, single]
    def index(string):
       lines = open('Network.txt', 'r')
       string = str(lines.read())
       lines.close()
       return string

3 个回答

1

试试这个:

words = []
lines = {}
for i in words:
    lines[i] = []

with open("file", "r") as fin:
    curLine = 0
    for i in fin.readLines():
        for j in words:
            if j in i:
                lines[j].append(curLine)
        curLine += 1

for i in words:
    print lines[j]
2

如果你只是想检查某些单词是否存在,可以使用 enumerate 和一个 集合并集 来处理相关的行。

words={'some', 'target', 'words', 'in', 'a', 'set'}

with open(f_name) as fin:
    for line_num, line in enuemrate(fin):
        if set(line.split()) & words:
            print(line_num, line)
2

假设你已经正确打开了文件,其实这件事很简单。使用 file.read() 会把整个文件的内容都读进来,这样做其实不太好。如果你想逐行处理文件,可以使用 with 语句,这样可以让打开、关闭文件和处理错误变得更简单:

with open(filename) as file:
    for line in file:
        #do something

你逻辑中的核心部分是 enumerate(),它可以对一个可迭代的对象进行计数,并且在每次迭代时返回当前的计数和对应的项目。

words = ["word","another"]
for line_num,line in enumerate(file):
    if any([word in line for word in words]):
        print line_num, line

另一个重要的部分是列表推导式,它用来检查某一行中是否包含任何一个单词。any() 函数的意思是“如果可迭代对象中的任何一个元素为真,就返回 True”。接下来的列表推导式:

[word in line for word in words]

可以理解为:

[告诉我 word 是否在 line 中,针对每一个 word in 所有的 words].

如果 any 这个单词在那个数组里,也就是说至少有一个你的单词在这一行中,那么它就会返回真(True),因此会被打印出来。

撰写回答