Kann ich eine Listenkomprehension verwenden Zeile Indizes aus einer Datei zu bekommen?
-
08-07-2019 - |
Frage
Ich brauche ein paar Stellen in einer Datei zu ermitteln, wo bestimmte Marker sein könnte. Ich begann zu denken, dass ich list.index verwenden würde, aber ich entdeckte bald, dass die erste zurückgibt (und nur die erste) Element. so habe ich beschlossen, meine eigene Lösung zu implementieren, die war
count=0
docIndex=[]
for line in open('myfile.txt','r'):
if 'mystring' in line:
docIndex.append(count)
count+=1
Das ist aber Python richtig. Es hat eine einfachere Lösung sein, da auch sie Python ist. Jagd um diese Seite und die Bahn kam ich mit etwas nach oben etwas besser
newDocIndex=[]
for line in fileinput.input('myfile',inplace=1):
if 'mystring' in line:
newDocIndex.append(fileinput.lineno())
Ich weiß, das zu viele Informationen, aber da ich fertig Finale gestern Abend Einstufung Ich dachte, gut dieser Python ist, und wir wollen, dass diese einige Fortschritte machen Sommer-lets Liste Verständnis versuchen
also tat ich dies:
[fileinput.lineno() for line in fileinput.input('myfile',inplace=1) if 'mystring' in line]
und bekam eine leere Liste. So vermutete ich zunächst, dass das Problem ist, dass das Element in der für das Element sein muss, die verwendet wird, um die Liste zu erstellen. Das ist, wenn ich habe Linie statt fileinput.lineno()
ich eine nicht-leere Liste gehabt hätte, aber das ist nicht das Problem.
Kann das obige Verfahren auf eine Liste Verständnis reduziert werden?
die Antwort verwenden, aber es zur besseren Lesbarkeit Einstellung
listOfLines=[lineNumb for lineNumb,dataLine in enumerate(open('myfile')) if 'mystring' in dataLine]
Lösung
Was ist das?
[index for index,line in enumerate(open('myfile.txt')) if 'mystring' in line]