我可以用列表解析从文件中获取行索引吗?

0 投票
1 回答
1536 浏览
提问于 2025-04-15 11:27

我需要在一个文件中找到一些特定标记的位置。一开始我想用 list.index 方法,但我很快发现它只会返回第一个(而且只返回第一个)项。所以我决定自己实现一个解决方案,结果是这样的:

count=0
docIndex=[]
for line in open('myfile.txt','r'):
    if 'mystring' in line:
        docIndex.append(count)
    count+=1

不过这是 Python,对吧?应该有更简单的解决办法,因为毕竟是 Python。在这个网站和网上找了一圈,我找到了一个稍微好一点的方法:

newDocIndex=[]
for line in fileinput.input('myfile',inplace=1):
    if 'mystring' in line:
    newDocIndex.append(fileinput.lineno())

我知道这信息有点多,但因为我昨晚刚把期末考试的成绩批完,我想,既然这是 Python,我们想在这个夏天有所进展,那就试试列表推导式吧。

于是我这样做了:

[fileinput.lineno() for line in fileinput.input('myfile',inplace=1) if 'mystring' in line]

结果得到了一个空列表。于是我首先猜测问题在于 for 循环中的项必须是用来构建列表的项。也就是说,如果我用 line 而不是 fileinput.lineno(),我可能会得到一个非空列表,但这并不是问题所在。

上面的过程能简化成列表推导式吗?

我使用了答案,但进行了可读性调整:

listOfLines=[lineNumb for lineNumb,dataLine in enumerate(open('myfile')) if 'mystring' in dataLine]

1 个回答

8

那这个呢?

[index for index,line in enumerate(open('myfile.txt')) if 'mystring' in line]

撰写回答