Datei Auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Eisi
User
Beiträge: 62
Registriert: Sonntag 24. November 2013, 21:59

Nachdem ich nun Google durchsucht habe, sowie die Suchtfunktion in diesem Forum, musste ich feststellen doch nochmal zu fragen. :K

Ich habe eine .txt Datei und möchte gerne mit dem Inhalt dieser Datei arbeiten. Ich möchte speziell nach einer Nummer suchen und wenn sie da ist eine Rückmeldung erhalten, dass sich diese Nummer in dieser Datei befindet. Ich habe einige versuche gestartet die wahrscheinlich komplett falsch sind ^^. Vielleicht sogar wo sich diese Nummer befindet.

Code: Alles auswählen

try:
    daten = open('test.txt','r')
    text = daten.read()

    if text == 123:
        print('Ja')
    else:
        print('Nein')
    daten.close()
        
except:
    print('Kann Datei nicht öffnen.')
Das ist eine Version meines Versuchs. Kann mir vielleicht jemand nen guten denkanstoß geben? :?:
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Eisi hat geschrieben:Das ist eine Version meines Versuchs. Kann mir vielleicht jemand nen guten denkanstoß geben? :?:
Du vergleichst die komplette Rückgabe mit dem Wert 123. Du möchtest aber schauen, ob der String sich irgendwo in der Datei befindet. Damit kommen wir auch gleich zum zweiten Problem. Du vergleichst einen String mit einem Integer-Wert. Dabei wirst du nie eine Übereinstimmung bekommen.

Grundsätzlich ist ohnehin die Frage wie deine Datei strukturiert ist. Hast du einzelne Zeilen mit Nummern? Steht die Nummer irgendwo im Fließtext? Im zweiten Fall hast du ein zusätzliches Problem, da dann bei einer Suche nach '123' auch Werte wie '0123456' gefunden würden. Du müsstest dann den Inhalt der Datei noch passend aufteilen.
Eisi
User
Beiträge: 62
Registriert: Sonntag 24. November 2013, 21:59

Erstmal vielen Dank für die schnelle Antwort.

Die Datei ist Zeilenweise mit (für meine Zwecke) unnützem Zeug gefüllt. Es sind Wörter, Zahlen und Sonderzeichen enthalten.

Die Zahlen nach denen ich suche, sind immer gleich aufgeteilt. xxxxxx-xxxx wobei x für eine Ziffer steht.
Für mich ist auch erstmal nicht wichtig wo die Zahlen stehen, sondern ob sie enthalten sind oder nicht.
Eisi
User
Beiträge: 62
Registriert: Sonntag 24. November 2013, 21:59

Code: Alles auswählen

try:
    daten = open('test.txt','r')
    text = daten.read()

    f = text.find('119102')
    
    daten.close
    
    if f >= 0:
        print('Ja')
    else:
        print('Nein')
    
       
except:
    print('Kann Datei nicht öffnen.')
Nun dieser Code funktioniert. Aber wenn die Zahl 11910 lautet sagt er auch noch True. Da fehlt wohl noch was
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Eisi hat geschrieben:Die Zahlen nach denen ich suche, sind immer gleich aufgeteilt. xxxxxx-xxxx wobei x für eine Ziffer steht.
Das ist dann keine Zahl im klassischen Sinne.
Eisi hat geschrieben:Für mich ist auch erstmal nicht wichtig wo die Zahlen stehen, sondern ob sie enthalten sind oder nicht.
Ich gehe jetzt davon aus, dass es sich um eine Textdatei mit Zeilen handelt. Dann würde ich die Datei öffnen, zeilenweise durchgehen um nicht die komplette Datei im Speicher halten zu müssen und in jeder Zeile nach dem Wert suchen. Das with-statement stellt dabei sicher, dass die Datei am Ende des with-Blocks automatisch geschlossen wird. Das hat seine Vorteile, vor allem wenn vergisst, sie wieder zu schließen (Hint: close ist nicht das gleiche wie close())

Code: Alles auswählen

def value_in_file(filename, value):
    with open(filename) as daten:
        for line in daten:
            if value in line:
                return True
    return False

if value_in_file('file.txt', '123456-7890'):
    print('OK')
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das kann man noch ein wenig zusammenfassen:

Code: Alles auswählen

def value_in_file(filename, value):
    with open(filename) as daten:
        return any(value in line for line in daten)
Das Leben ist wie ein Tennisball.
Antworten