2017-01-02 8 views
1

Ich schreibe einen Code, der in einer Textdatei aussieht, und sieht, ob die Eingabe dort ist.Python - Finde Zeilennummer aus der Textdatei

z.B.

I-Eingang "Pizza"

Mein Text-Datei enthält:

bread 
pizza 
pasta 
tomato 

Ich möchte einen Weg finden, die die Zeilennummer das Wort Pizza auf drucken. Irgendeine Hilfe?

+1

Beginnen Sie mit dem Lesen des [Tutorial] (https://docs.python.org/3/tutorial/index.html) und üben Sie die Beispiele, bald werden Sie Ideen bekommen - probieren Sie einige davon in der Shell aus Um herauszufinden, was funktioniert und was nicht, sehen Sie in den Dokumenten nach den [* eingebauten * Funktionen] (https://docs.python.org/3/library/functions.html) nach, ob sie helfen können Sie lösen das Problem. – wwii

Antwort

1
with open('test.txt') as f: 
    content = f.readlines() 

index = [x for x in range(len(content)) if 'pizza' in content[x].lower()] 

Teil (1) des Codes liest jede Zeile als eine separate Liste in der Variablen "Inhalt".

Teil (2) füllt die Zeile # Inhalt nur aus, wenn 'Pizza' in dieser Zeile vorhanden ist. [x für x im Bereich (len (content))] füllt einfach alle Indexwerte auf, während 'if' pizza 'in content [x] .lower()' die Zeile # behält, die mit der Zeichenfolge übereinstimmt.

+0

Können Sie bitte eine Erklärung abgeben? – Cherniv

+0

Entschuldigung, ich habe die Erklärung hinzugefügt – Oxymoron88

+0

Was drucke ich dann, um mir die Zeilennummer zu geben? Welche Variable ist die Zeilennummer? – googlecoolcat

0
print next (i for i,v in enumerate (open (fname),1) if v == needle) 
+0

Sie möchten die Datei nicht später schließen? –

1

Es gibt zwei Möglichkeiten, dies zu erreichen:

  1. die gesamte Datei im Speicher speichern, so dass Sie es nur einmal gelesen
  2. auf jeder Suche durch die Datei zu lesen, aber nicht speichern zu müssen
  3. es

Für Verfahren 1, lesen sie zuerst in jeder Zeile und dann den Index erhalten, dass das Wort auf ist:

with open('path.txt') as f: data = f.readlines() 
line_no = data.index("pizza") 

Alternativ gehen Sie durch die Datei, um den Index zu finden:

with open('path.txt') as f: 
    for line_no, line in enumerate(f): 
     if line == "pizza": 
      break 
    else: # for loop ended => line not found 
     line_no = -1 
1

So ähnlich?

import re 
import os # You can go without is if you have other means to get your filepath 

i = 1 
matches = [] 
target = raw_input("Please type string to match\n") 
with open(os.getenv("SOME_PATH") + "/myfile.txt") as fic: # open("myfile.txt") if in your current directory 
    for line in fic: 
     if re.search(target, line): 
      print "Found at line {}".format(i) 
      matches.append(i) 
     i = i +1 
if not len(matches): 
    raise Exception, "target not found" 

Auf diese Weise können Sie Eingabe um einen regulären Ausdruck und es sollte funktionieren (das heißt, wenn Sie Eingabe „p.zza“ oder „^ p. *“, Wird es funktionieren.). Die Liste matches enthält alle Indizes von Zeilen, die dem Eingabemuster entsprechen.

Verwandte Themen