搜索文本文件并打印行号
你怎么让你的函数找到文本文件中出现某个单词的行,并打印出对应的行号呢?
我需要打开一个包含段落的文本文件,然后在这个段落中搜索特定的单词,最后打印出这些单词所在的具体行号。
这是我目前的进展。
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
假设你已经正确打开了文件,其实这件事很简单。使用 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),因此会被打印出来。