2016-06-03 6 views
0

Ich versuche, bestimmte Wörter aus einer Textdatei zu finden, aber mein Skript scheint nicht in der Lage zu sein, das Wort mit dem zu vergleichen, was in einer Zeile in der Textdatei steht obwohl ich weiß, dass es passt. Ich habe bemerkt, dass es Leerzeichen gibt, aber da ich sage entry in line, sollte es nicht funktionieren?Python: Skript findet kein Wort in Textdatei

habe ich auch versucht:

if str(entry) in line:, 
    if str(entry) in str(line): and 
    if entry in str(line): 

aber keiner von ihnen scheinen entweder

ich sehen kann, nicht zu arbeiten, wo ich falsch gehe. Jede Hilfe wäre willkommen.

Hier ist mein Code

with open(address+'file_containing_data_I_want.txt') as f: 
    for entry in System_data: 
     print "Entry:" 
     print entry 
     for line in f: 
      print "Start of line" 
      print line 
      print"End of line" 
      if entry in line: 
       print "Found entry in line" #This never gets printed 

die Druckanweisungen (für nur den ersten Eintrag) Ich sehe:

Entry: 
Manufacturer 


Start of line 
?? 

End of line 
Start of line 


End of line 
Start of line 
Manufacturer=manufacturer_data 

End of line 
Start of line 
Model=model_data 

End of line 
Start of line 


End of line 
Start of line 


End of line 

Die Textdatei sieht wie folgt aus (Anmerkung: Ich kann nicht ändern die Textdatei, da dies die Art, wie ich es empfangen wird, ' eine leere Zeile an):

' 
' 
Manufacturer=manufacturer_data 
Model=model_data 
' 
' 
' 

UPDATE: Ändern mein Skript:

with open(address+'file_containing_data_I_want.txt') as f: 
    for line in f: 
     print "Start of line %s" % line 
     print"End of line" 
     for entry in System_data: 
      print "Entry: %s" % entry 
      if entry in line.strip(): 
       print "Found entry in line" 

Ergebnisse in dieser gedruckt wird (noch nicht "Gefunden Eintrag in line"):

Entry: Manufacturer 
Entry: Model 
Start of line: 
End of line 
Entry: Manufacturer 
Entry: Model 
Start of line: Manufacturer=manufacturer_data 
End of line 
Entry: Manufacturer 
Entry: Model 
Start of line: Model=model_data 
Entry: Manufacturer 
Entry: Model 
Start of line: 
End of line 
Entry: Manufacturer 
Entry: Model 
Start of line: 
End of line 

Ändern der Code folgendermaßen aus:

for line in f: 
    print "Start of line: %s" % line.strip("\r\n") 
    print "End of line" 
    for entry in System_data: 
     print "Entry: %s" % entry.strip() 
     if entry.strip() in line.strip("\r\n"): 
      print "FOUND!!!!!!!!!!!!!" 

Gibt mir das:

Start of line: ?? 
End of line 
Entry: Manufacturer 
Entry: Model 
Start of line: 
End of line 
Entry: Manufacturer 
Entry: Model 
Start of line: Manufacturer=manufacturer_data 
End of line 
Entry: Manufacturer 
Entry: Model 
Start of line: Model=model_data 
End of line 
+0

Es scheint, als ob Ihr 'Eintrag' Zeilenumbrüche enthält. Versuchen Sie es in Ihrem 'if' zu entfernen. – Lafexlos

Antwort

0

Ok aufrufen, so dass es das scheint Problem war, dass die Zeichenfolge tatsächlich in Hexadezimalform war. Aber es schien nur mir hexadezimal, wenn ich print repr(line) es verwendet erschien wie: '\x00m\x00a\x00n\x00u\x00f\x00a\x00c\x00t\x00u\x00r\x00e\x00r\x00_\x00d\x00a\x0‌​0t\x00a\x00'

Also änderte ich meinen Code auf die folgenden:

with open(address+'file_containing_data_I_want.txt') as f: 
    for line in f: 
     for entry in System_data: 
      line=line.strip() 
      line = re.sub(r'[^\w=]', '', line) 
      if entry in line: 
       print "Found entry in line" 

Dieses Skript tritt nun in die Schleife if entry in line: und Drucke "Found entry in line"

0

Sie sollten alle Leerzeichen/Zeilenumbrüche aus dem Eintrag und den Zeilen in der Datei entfernen. Also, das Präfix alles mit

entry = entry.strip() 

und ändern Sie die

if entry in line: 

zu

if entry in line.strip(): 

EDIT: auch, was Moses Koledoye sagt

1

Sie bis zum Ende des Lese Datei nach der ersten Schleife. Tauschen Sie die Schlaufen statt, so dass jeder entry in System_data wird in jeder Zeile der Datei überprüft:

for line in f: 
    print "Start of line %s" % line 
    print "End of line" 
    for entry in System_data: 
     print "Entry: %s" % entry 
     if entry.strip() in line.strip("\r\n"): 
      print "Found entry in line" #This now gets printed 

oder Sie dieses Verhalten in Ihrem aktuellen Code korrigieren kann durch f.seek(0) vor for line in f

+0

Ich habe meinen Code so geändert, dass er Ihrem ähnlich ist (außer ich habe auch die Zeile.strip() hinzugefügt), weder diese Methode noch Ihre Methode scheint für mich zu funktionieren. Sie findet den Eintrag immer noch nicht in der Zeile – Catherine

+0

f.seek (0) 'zu Ihrem ursprünglichen Code wie in meinem Update –

+0

Ich habe, es ist immer noch nicht in die Schleife zu drucken" Gefunden Eintrag in der Zeile "aus irgendeinem Grund – Catherine