2009-05-07 8 views
0

Ich muss einige Positionen in einer Datei identifizieren, wo bestimmte Marker sein könnten. Ich fing an zu denken, dass ich list.index verwenden würde, aber ich entdeckte bald, dass der erste (und nur der erste) Artikel zurückgegeben wurde. so entschied ich mich, meine eigene Lösung zu implementieren, die warKann ich ein List Comprehension verwenden, um Linienindizes aus einer Datei zu erhalten?

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

Aber das ist Python richtig. Es muss eine einfachere Lösung geben, denn es ist Python. Jagd um diese Seite und der 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ß, diese Informationen zu viel ist, aber da ich fertig Finale gestern Abend Einstufung dachte ich gut diese Python ist, und wir wollen einige Fortschritte machen in diesem Sommer: Hiermit können Sie eine Liste Verständnis versuchen

so das ich getan habe:

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

und bekam eine leere Liste. Also habe ich zuerst vermutet, dass das Problem darin besteht, dass das Element in der Datei das Element sein muss, das zum Erstellen der Liste verwendet wird. Wenn ich statt fileinput.lineno() eine Zeile hätte, hätte ich eine nicht leere Liste, aber das ist nicht das Problem.

Kann der obige Prozess auf ein Listenverständnis reduziert werden?

Mit der Antwort, aber es für die Lesbarkeit

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

vor „zum besseren Lesbarkeit Einstellung“ lesen http://www.python.org/dev/peps/pep-0008/ – SilentGhost

+0

Ich verstehe Ihren Standpunkt nicht, obwohl ich die Referenz abgeschöpft. – PyNEwbie

+1

SilentGhost kann bedeuten, dass die typische Python-Konvention die Verwendung von Unterstrichen zwischen Wörtern in Variablennamen empfiehlt. Zum Beispiel: list_of_lines und line_numb statt listOfLines und lineNumb. –

Antwort

8

Was ist mit dieser Einstellung?

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

Danke, es sei denn, ich habe etwas falsch gemacht nein – PyNEwbie

+0

nein was? es tut genau das, was dein Code auf eine nette pythonische Art tut. – SilentGhost

+0

Ich habe etwas falsch gemacht wow es hat funktioniert Dank – PyNEwbie

Verwandte Themen