Abschneiden - anpassen von einer Ausgabe /Datei

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
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Hallo,

ich hänge gerade fest mit 2 Problemen: (Bin für jede erklärte /dargestellte Verbesserung offen, ich muss hier noch viel lernen)

hier erstmal mein Code:

Code: Alles auswählen

login_data = XXXXXXXXX()
path='/test/try'

DB_CONN_STATEMENT = \
          """
          SELECT
            name 
          FROM
            liste
          WHERE
            email ilike '%@test.de';
          """


with psycopg2.connect('host=XXXXX dbname=XXXX user={} password={}'.format(login_data['user'], login_data['password'])) as conn:
  with conn.cursor() as cursor:
    cursor.execute(DB_CONN_STATEMENT)
    fetched_rows = cursor.fetchall()

    f = open(path, 'a')
    try:
      for row in fetched_rows:
          f.write(str(row) + "\n")
          f.seek(0)

    finally:
      f.close()

fin = open("/test/try", "rt")
fout = open("/test/try1.txt", "wt")
for line in fin:
    fout.write(line.replace('(', ''))
fin.close()
fout.close()


fin1 = open(""/test/try1.txt", "rt")
fout1 = open(""/test/try2.txt", "wt")
for line in fin1:
        fout1.write(line.replace(')', ''))
fin1.close()
fout1.close()


So nun meine Frage,

also ich bekomme mit der DB Abfrage folgende Ausgabe :

Code: Alles auswählen

(111,)
(112,)
(113,)
(114,)
nach meinen umständlichen Code sieht das ganze so aus (aber ich bekomme das Komma in der letzten Zeile nicht weg)

Code: Alles auswählen

111,
112,
113,
114,
aber so hätte ich es gerne in meiner Datei:

Code: Alles auswählen

111,
112,
113,
114 ####(letzte Zeile ohne KOMMA)
Hab es nur auf dem weg hinbekommen mit den line.replace aber auch hier muss ich jeweils die Datei neu anpacken damit ich einmal ( und ) rausfiltern kann. (wie erwähnt, abgesehen von dem Komma in der letzten Zeile was ich nicht wegbekomme)

Schöner wäre es natürlich das in einem Schritt hinzubekommen.

hatte hier auch erst probiert die org. Datei zu übschreiben:

Code: Alles auswählen

with open("/test/try", "rt") as file:
	x = file.read()
	
with open("/test/try", "wt") as file:
    x = x.replace("(", "")
	fin.write(x)


Hier passierte dann folgendes: Meine try Datei war komplett leer, also statt was zu entfernen wurde alles entfernt und auch hier sehe ich keinen Lösungsweg um '(' und ')' in einem Befehl entfernt zu bekommen. Außerdem finde ich keinen Ansatz um in der letzten Zeile das letzte Komma zu entfernen. (würde ungern auf sed zurückgreifen)
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Stringrepräsentation eines Tuples ist nicht für die Speicherung in einer Datei gedacht. Das seek ist Quatsch.
Du hast Stellenweise zu viele Anführungszeichen. Dateien öffnet man innerhalb eines with-Statements.
Eingerückt wird mit 4 Leerzeichen pro Ebene, nicht mal 2, mal 4 und dann 8.
Und wenn Du kein Komma möchtest, dann schreib einfach keins.

Code: Alles auswählen

with open("try", "w") as output:
    output.write(",\n".join(str(row[0]) for row in fetched_rows) + "\n")
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Danke Sirius3,

das hat mir geholfen und das ganze um einiges kürzer gemacht.
Formatierung -> danke für den Hinweis ich werde ihn einhalten
Antworten