我可以用列表解析从文件中获取行索引吗?
我需要在一个文件中找到一些特定标记的位置。一开始我想用 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]