Open - SyntaxError: unexpected EOF while parsing

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
sandordan
User
Beiträge: 6
Registriert: Dienstag 23. Juni 2020, 10:20

Hallo Ich bekomme immer die oben genannte Fehlermeldung wenn ich die csv öffnen möchte.

Code: Alles auswählen

with open('H:/Controlling/Py/DB_Mitarbeiter.csv', mode='r') as ifile:

Code: Alles auswählen




with open('H:/Controlling/Py/DB_Mitarbeiter.csv', mode='r') as ifile:
  File "<ipython-input-69-95d3a75e0e49>", line 1
    with open('H:/Controlling/Py/DB_Mitarbeiter.csv', mode='r') as ifile:
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Der Fehler ist, dass ein Block erwartet wird, aber die Datei aufhört. Innerhalb des with-Blocks muß etwas stehen.
sandordan
User
Beiträge: 6
Registriert: Dienstag 23. Juni 2020, 10:20

ich habe darunter alles gelöscht und bekomme ich noch immer diese Fehlermeldung...
Benutzeravatar
__blackjack__
User
Beiträge: 13113
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sandordan: Die Antwort bleibt die gleiche, in dem ``with``-Block muss etwas stehen, und wenn es nur ein ``pass`` ist oder ``...`` (Syntax für ein `Ellipsis`-Objekt).

Bei CSV-Dateien die mit dem `csv`-Modul vearbeitet werden sollen muss man noch ein ``newlinw=""`` beim öffnen übergeben und man sollte bei Textdateien immer explizit die Kodierung angeben.

Namen sollten keine kryptischen Abkürzungen enthalten. Wenn man `input_file` meint, sollte man nicht nur `ifile` schreiben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
sandordan
User
Beiträge: 6
Registriert: Dienstag 23. Juni 2020, 10:20

Danke Euch könnt Ihr bitte helfen dann wie es aussehen sollte?

Code: Alles auswählen

import mysql.connector
import csv
conn=mysql.connector.connect(user='X',password='Y', database='km_db')
cursor=conn.cursor()

with open('test.csv') as input_file:
file=csv.reader(input_file, delimiter=';')

for row in file:
    cursor.execute("""INSERT INTO test_tbl(name_txt, ID_1 )''VALUES("%s", "%s")', row"""")

mydb.commit()
cursor.close()
print("Done")
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Blöcke werden in Python durch Einrückungen gekennzeichnet.
Das with-Statement sorgt dafür, dass etwas in nachfolgenden Block zur Verfügung steht und nach Verlassen des Blocks korrekt geschlossen wird.
Dafür muss nach dem with aber auch ein Block folgen.
Bei dir ist da aber nichts eingerückt.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Benutze keine Abkürzungen: conn -> connection
Dateien für csv müssen mit newline="" geöffnet werden.
Das SQL-Statement ist nicht gültig. mydb wird nirgends definiert.
sandordan
User
Beiträge: 6
Registriert: Dienstag 23. Juni 2020, 10:20

Ich bin ein Anfänger:) wie sieht es aus wenn ich die csv mit newline="" öffnen möchte?
danke
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Ungetestet:

Code: Alles auswählen

import mysql.connector
import csv

connection = mysql.connector.connect(user='X',password='Y', database='km_db')
cursor = connection.cursor()

with open('test.csv', encoding='utf8', newline='') as input_file:
    rows = csv.reader(input_file, delimiter=';')
    for row in rows:
        cursor.execute("INSERT INTO test_tbl (name_txt, ID_1) VALUES (%s, %s)", row)

connection.commit()
cursor.close()
print("Done")
Die Tabelle und Felder sind allesamt schlecht benannt. Das tbl hat im Tabellennamen nichts zu suchen. Abkürzungen erst recht nichts. Dass es sich um einer Tabelle handelt, wird schon aus der Position der Verwendung klar. Was soll das txt bei name_txt? ID_1? Um welche ID handelt es sich denn?
Benutzeravatar
__blackjack__
User
Beiträge: 13113
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das wäre vielleicht auch ein Fall für `executemany()`.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
sandordan
User
Beiträge: 6
Registriert: Dienstag 23. Juni 2020, 10:20

with open('test.csv', encoding='utf8', newline='') as input_file:
File "<ipython-input-11-ecec768d3349>", line 1
with open('test.csv', encoding='utf8', newline='') as input_file:
^
SyntaxError: unexpected EOF while parsing
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Soweit waren wir doch schon einmal.
sandordan
User
Beiträge: 6
Registriert: Dienstag 23. Juni 2020, 10:20

Ja mit diesem Code geht es auch nicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13113
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sandordan: Der muss halt schon vollständig sein. In Sirius3's Beispiel folgen auf diese Zeile ja noch sieben weitere Zeilen. Die müssen da halt auch stehen wenn Du das an dem Python-Compiler verfüttern willst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten