2016-11-22 2 views
0

ich eine Datei PhaseMar.txt mit jeder Zeile nur mit Zahlen wie, wie Sie überprüfen, ob eine Zahl in einer Datei auf einer separaten Zeile existieren Python mit

4 
16 
14 
44 
55 
34 

Es ist erforderlich, zu prüfen, ob eine bestimmte Anzahl lassen Wir nehmen an, 16 existiert in dieser Datei oder nicht.

ich verwende

test_file = open('PhaseMar.txt', 'r') #modification! 
test_lines = test_file.readlines() #modification! 
print test_lines 
size =len(test_lines) #[0] 
print size 
count=0 
       for i in xrange(1,size): 
       #print int(realID) 
       #print int(test_lines[i]) 
       print (int(test_lines[i])-int(realID)) 
       if abs(int(test_lines[i])-int(realID))> 0.1: 
       count=count+1 
       else: 
       count=0 

       if (count>0): 
       print "true" 
       else: 
       print "false" 
       count=0 

Es prüft alle Einträge 6 mal und es gibt mir Antwort wahr, wenn die Zahl existiert. Es druckt aber auch alle Falschen mit. Ich frage mich, ob es dafür einen Einzeiler gibt. Grüßen,

Antwort

1

Lets sagen Check für integer 16 in Datei PhaseMars.txt, schnelle Lösung, wie unten, aber es ist nicht speichereffiziente große Datei zu handhaben, da sie ganze Datei in den Speicher

check = str(16) 
with open('PhaseMars.txt') as f: 
    match = check in f.read().splitlines() 
    # match will be True if match inside file, False otherwise 

wenn lesen müssen Sie müssen große Datei umgehen, itertools könnte nützlich sein, es liest jede Zeile aus der Datei nur wenn für die Verarbeitung bei jeder Iteration benötigt.

Beispiel, können sagen wir auf Nummer mehr als 16 Import itertools

chk = 16 
with open(r'PhaseMars.txt') as f: 
    # match holding iterator for line that match > 16 predicate 
    # replace itertools.ifilter with just filter for python 3 
    match = itertools.ifilter(lambda x:int(x.strip()) > chk, f) 

    # you may process the match item afterwards 
    for i in match: 
     # do your processing of the matching item here 
     # for eg. just print them out 
     print(i.strip()) 

    # OR built them into a list 
    matchlist = list(match) 
+0

interessiert sind, ist es funktioniert nicht, wenn die Datei als diese große und andere ist, muss ich Recht, jede ganze Zahl zu String ändern? Gibt es einen besseren Weg, da ich auch einige Berechnungen machen muss. –

+0

Sie sind richtig, es ist nicht effizient für die Handhabung großer Dateien, überprüfen Sie die bearbeitete Antwort, wenn Sie Ihre Bedürfnisse erfüllen :) – Skycc

Verwandte Themen