it-swarm.com.de

Zeilennummer einer bestimmten Phrase in der Datei Python abrufen

Ich muss die Zeilennummer einer Phrase in einer Textdatei erhalten. Der Satz könnte sein:

the dog barked

Ich muss die Datei öffnen, nach dieser Phrase suchen und die Zeilennummer drucken.

Ich verwende Python 2.6 unter Windows XP


Das ist was ich habe:

o = open("C:/file.txt")
j = o.read()
if "the dog barked" in j:
     print "Found It"
else:
     print "Couldn't Find It"

Dies ist keine Hausaufgabe, es ist Teil eines Projekts, an dem ich arbeite. Ich habe nicht einmal eine Ahnung, wie ich die Zeilennummer erhalten kann.

41
Zac Brown
lookup = 'the dog barked'

with open(filename) as myFile:
    for num, line in enumerate(myFile, 1):
        if lookup in line:
            print 'found at line:', num
78
Sacha
f = open('some_file.txt','r')
line_num = 0
search_phrase = "the dog barked"
for line in f.readlines():
    line_num += 1
    if line.find(search_phrase) >= 0:
        print line_num

1,5 Jahre später BEARBEITEN (nachdem ich gesehen habe, dass es erneut positiv bewertet wurde): Ich lasse dies so, wie es ist. aber wenn ich heute schreiben würde, würde ich etwas näher an Ash/suzanshakyas Lösung schreiben:

def line_num_for_phrase_in_file(phrase='the dog barked', filename='file.txt')
    with open(filename,'r') as f:
        for (i, line) in enumerate(f):
            if phrase in line:
                return i
    return -1
  • Das Öffnen von Dateien mit with ist das Pythonic-Idiom - es stellt sicher, dass die Datei ordnungsgemäß geschlossen wird, wenn der Block, der die Datei verwendet, endet.
  • Das Durchlaufen einer Datei mit for line in f ist viel besser als mit for line in f.readlines(). Ersteres ist Pythonic (würde z. B. funktionieren, wenn f eine generische Iteration ist; nicht unbedingt ein Dateiobjekt, das readlines implementiert), und effizienter f.readlines() erstellt eine Liste mit der gesamten Datei in Erinnerung und durchläuft es dann. * if search_phrase in line ist pythonischer als if line.find(search_phrase) >= 0, da es nicht line erfordert, um find zu implementieren (z. B. funktionieren if line.find(search_phrase) und if line.find(search_phrase) > 0 nicht in allen Fällen, da find den Index der ersten Übereinstimmung oder -1 zurückgibt.).
  • Es ist einfacher, ein iteriertes Element in enumerate wie for i, line in enumerate(f) zu packen, als line_num = 0 vor der Schleife zu initialisieren und dann manuell in der Schleife zu erhöhen. (Obwohl dies wohl schwieriger zu lesen ist für Leute, die mit enumerate nicht vertraut sind.)

Siehe Code wie pythonista

7
dr jimbob
def get_line_number(phrase, file_name):
    with open(file_name) as f:
        for i, line in enumerate(f, 1):
            if phrase in line:
                return i
4
suzanshakya

suzanshakya , Ich ändere gerade Ihren Code. Ich denke, das vereinfacht den Code, aber vergewissern Sie sich vor dem Ausführen des Codes, dass sich die Datei im selben Verzeichnis der Konsole befinden muss.

lookup="The_String_You're_Searching"
file_name = open("file.txt")
for num, line in enumerate(file_name,1):
        if lookup in line:
            print(num)
2
list = open("file_name","mode")

if "search element" in list:
    print list.index("search element")  # This will gives you the line number
1
M. kavin babu

Öffne deine Datei und mache dann etwas wie ...

for line in f:
    nlines += 1
    if (line.find(phrase) >= 0):
        print "Its here.", nlines

Es gibt zahlreiche Möglichkeiten, Zeilen aus Dateien in Python zu lesen, aber die for line in f-Technik ist effizienter als die meisten anderen.

1
slezica
for n,line in enumerate(open("file")):
    if "pattern" in line: print n+1
0
ghostdog74

Folgendes habe ich gefunden:

f_rd = open(path, 'r')
file_lines = f_rd.readlines()
f_rd.close()

matches = [line for line in file_lines if "chars of Interest" in line]
index = file_lines.index(matches[0])
0
Onkar Raut