Seite 1 von 1

txt datei einlesen

Verfasst: Mittwoch 9. Februar 2022, 13:39
von genervternewbie
ich möchte eine txt datei namens config.txt einlesen und die daten darin verwenden
ich habe schon einiges gefunden und getestet aber nichts was ich suche gefunden bzw umsetzen können
config.txt
1,2,321,355,313

Code: Alles auswählen

with open("file.txt", "r") as tf:
    lines = tf.read().split(',')
for line in lines:
    print(line)
Ausgabe

Code: Alles auswählen

1
2
321
355
313
Ok soweit verstehe ich alles und kann es auch nutzen
Ich bekam bei einem anderen anliegen folgende code

Code: Alles auswählen

DB_CONNECTIONS = [
    ("192.168.1.200", "pi", "raspberry", "rfid"),
    ("192.168.1.201", "pi", "raspberry", "rfid"),
    ("192.168.1.202", "pi", "raspberry", "rfid"),
   ... 
    ("192.168.1.254", "pi", "raspberry", "rfid")
    ]

for host, username, password, database in DB_CONNECTIONS:
    try:
         connection = mysql.connector.connect(
            host=host,
            user=username,
            password=password,
            database=database
          )
         break
    except <der-verbindungsfehler>:
        pass
Wenn ich den Code richtig verstehe, dann durchlaufe for solange bis eine Verbindung aufgebaut wurde oder das ende erreicht hat.
Wenn ich durchlauf nichts gefunden dann im except könnte ich dann ein satz nehmen
connection = mysql.connector.connect( host=localhost, user=pi, password=raspberry, database=rfid )
Ich dachte an
config.txt
Zeile 1
Hans,Klarin,Michael,Bully,Herbig,Dach,Haus,Wohnung...
ab Zeile 2
192.168.1.200,pi,raspberry,rfid,info200
192.168.1.201,pi,raspberry,rfid,info201
192.168.1.202,pi,raspberry,rfid,info202
....,
192.168.1.254,pi,raspberry,rfid,info254
Mit 2 Config-Datein würde ich es fast hinbekommen ( Ausnahme )
Die config.txt ist meine Config-Datei, so das ich am Script nicht ändern brauch ( Später vieleicht auch noch änderbar über webseite gemacht werden kann).
Wie in Zeile 1 möchte ich verschiedene Werte (Zahlen, Wörter oder Zahlen und Wörter) verwenden
ab Zeile 2 sollen dateien für mehrfach DB abfrage stehen mit einen Zusatz (Ausnahme) wo ich als Anzeige nutzen kann.
ich weiß da sich schleifen sogar ab einer bestimmten zeile ablaufen lassen kann allerdings bis zähler ende
da mein zählerende offen ist habe ich das zweite problem

Code: Alles auswählen

Input1 = line[2]   # pos 2 aus zeile 1      #z.B. Dach
Input2 = line[5]   # pos 5 aus zeile 1      #z.B. Michael

for oder while:
    try:
         connection = mysql.connector.connect(
            host=host,
            user=username,
            password=password,
            database=database
          )
         print("Zeige mir infoxxx ")
         break
    except:
         connection = mysql.connector.connect(
            host=host,
            user=username,
            password=password,
            database=database
          )
         print("Zeige mir infoxxx ")
    finally:
        print("Ok weiter")
Ist mein vorhaben überhaupt möglich wenn ja dann wie ?

Re: txt datei einlesen

Verfasst: Mittwoch 9. Februar 2022, 14:17
von sparrow
Ich würde das configparser Modul aus der Bibliothek nehmen.

Re: txt datei einlesen

Verfasst: Mittwoch 9. Februar 2022, 14:38
von imonbln
Ich kann dir nur abraten eine Konfiguration Datei zu schreiben, in welcher in magischen Zeilennummern irgendwas stehen muss. Grundsätzlich sind die meisten Konfigurationen Key/Value Paare oder sollten es sein. Die zu speichern, dafür gibt es schon erprobte Methoden. (INI, Toml, yaml, json, xml), um nur ein paar zu nennen.

Für JSON bringt Python das json Module mit, für INI den configparser, warum versucht du das Rad neu zu erfinden, statt dir eins der Formate zu nehmen und Fertige Module zu nehmen. Deine Konfiguration könnte als JSON vielleicht so aussehen. Das kannst du dann einfach mit json.load verarbeiten.

Code: Alles auswählen

{
    "array" : [1,2,321,355,313],
    "databases": [
        {
            "location": "192.168.1.200",
            "name": "pi",
            "user": "rfid"
        },
        {
            "location": "192.168.1.201",
            "name": "pi",
            "user": "rfid"
        },
        {
            "location": "192.168.1.202",
            "name": "pi",
            "user": "rfid"
        }
    ]
}

Code: Alles auswählen

import json

with open('config.json') as jin:
   configuration = json.load(jin)
for currentdb in configuration.get('databases', []):
     print(currentdb['location'], currentdb['user'])

Re: txt datei einlesen

Verfasst: Mittwoch 9. Februar 2022, 15:00
von __blackjack__
Öffnen sollte man das entweder als Binärdatei oder wenn Textdatei dann UTF-8 als Kodierung explizit angeben.

Re: txt datei einlesen

Verfasst: Mittwoch 9. Februar 2022, 17:17
von genervternewbie
Sorry zu viel input für mich
Mir sagen configparswer Modul, Bibliothek , json, ini, xml, usw kann ich nicht viel mit anfangen
ini sind für configurations datei aus Windows
xml hat was mit webseiten zu tun
bibliothek bei progamierung verstehe auch nicht viel ( denke ( import *.py ) sowas wäre gemeint)
aber habe mich mit diesen dingen nie beschäftigt

Code: Alles auswählen

    {
    "array" : [1,2,321,355,313],
    "databases": [
        {
            "location": "192.168.1.200",
            "name": "pi",
            "user": "rfid"
        },
        {
            "location": "192.168.1.201",
            "name": "pi",
            "user": "rfid"
        },
        {
            "location": "192.168.1.202",
            "name": "pi",
            "user": "rfid"
        }
sowas in der art habe ich schon
meine anzahl für location hier ist offen, es können 2 oder mehr werden
daher hier ein code wo ich weniger habe als wie hier gezeigt
Mein py programmm wollte ich flexibler machen, da ich mehrere Standort habe und aber den meisten Code von mir überall brauche
und nur 2,3 Punkte wo ich Text habe den ersetzen möchte und nicht für jedes Teil den ganzen Code durchsuchen will
da je nach standort auch andere IP adresse bzw DB anfallen wollte ich diese auch flexible halten
mein wissen ist was schleifen angeht beschränkt
ich weiß das ich eine bestimmte anzahl an durchläufe machen kann z.b.
i=1 x= 54
wiederhole solange i bis x erreicht ist
soweit habe ich schleifen als zähler verstanden
aber nicht wenn x = unbekannt ist
da dachte ich an
try:
wiederhole solange bis ende
except:
falls nicht dann das hier
finally:
ok hier geht es weiter
ich brauche also ein schleife innerhalb vom try
meine texte wo ich ändern will dachte ich an Variablen ( Globale Variablen )
Ich wollte alles in eine Datei packen und auslesen für jeden bedarf
aber es soll per website mit php eine schnelle lösung zur änderung meiner configdatei möglich sein
mein code basiert nur auf dem was ich verstehe so sachen wo json und co denke ich das ich zu wenig wissen noch über python habe
und erst später mehr dazu lernen kann wen ich mehr verstehe

Re: txt datei einlesen

Verfasst: Mittwoch 9. Februar 2022, 17:19
von __deets__
Den Code, der etwas solange tut, bis es klappt, den habe ich dir doch schon gezeigt. Wieso brauchst du also ploetzlich wieder "ein schleife innerhalb vom try"?

Und wenn dir etwas nichts sagt, dann kann man das ja aendern. Indem man das mal nachliest.

Re: txt datei einlesen

Verfasst: Mittwoch 9. Februar 2022, 18:34
von genervternewbie
meiner versuche ergaben
das ich nur 1 abfrage bei try machen kann
try:
mydb = mysql.connector.connect(
host="192.168.1.200",
user="pis",
password="raspberry",
database="rfid"
)
print("nein")
except:
mydb = mysql.connector.connect(
host="localhost",
user="pi",
password="raspberry",
database="rfid"
)
print("ja")
finally:
time.sleep(0.2)
ich verstehe hier wenn zwischen try und except ein ok wäre dann weiter mit finally
sonst nim except und dann finally
aber ich will eine unbekannte anzahl testen erst bevor ich zu except komme

Nachlesen ist leichter gesagt ich fand nur
x = 0
while x < 5:
print( x )
oder
orte = ["Berlin", "Stuttgart", "Frankfurt", "Hamburg"]
for x in orte:
print( x )
wenn ich mehr als 1 mal orte habe
im grunde sowas
orte = ["Berlin1", "Stuttgart1", "Frankfurt1", "Hamburg1"]
orte = ["Berlin2", "Stuttgart2", "Frankfurt2", "Hamburg2"]
orte = ["Berlin3", "Stuttgart3", "Frankfurt3", "Hamburg3"]
das wo ich X habe eine schleife laufen habe
try:
mydb = mysql.connector.connect(
host="BerlinX",
user="StuttgartX",
password="FrankfurtX",
database="HamburgX"
)
print("nein")
except:
mydb = mysql.connector.connect(
host="Mainz",
user="Koeln",
password="Reute",
database="Gedern"
)
print("ja")
finally:
time.sleep(0.2)

Re: txt datei einlesen

Verfasst: Mittwoch 9. Februar 2022, 21:41
von __deets__
Ich habe dir konkreten Code gezeigt. Was an dem kapierst du nicht?