Kann ich eine Listenkomprehension verwenden Zeile Indizes aus einer Datei zu bekommen?

StackOverflow https://stackoverflow.com/questions/835572

  •  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]
War es hilfreich?

Lösung

Was ist das?

[index for index,line in enumerate(open('myfile.txt')) if 'mystring' in line]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top