csv lesen geht nicht

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
Hellstern
User
Beiträge: 13
Registriert: Mittwoch 4. Januar 2023, 08:14

Hallo zusammen, irgendwie stehe ich auf dem Schlauch.
Ich möchte eigentlich nur ein csv-File lesen, bekomme aber immer eine Fehlermeldung.
Ich habe es gemacht, wie die Beispiele in diesem Forum.
Das csv-File liegt im selben Ordner wie das Projekt

def readCSV(csv):
writeHistory('csv-File lesen...')
with open('VNXA99.csv', 'r') as file_raw:
data_read = csv.reader(file_raw, delimiter=';')
for zeile in data_read:
print(zeile)


Fehlerhafte Zeile
data_read = csv.reader(file_raw, delimiter=';')

Fehlermeldung
AttributeError: 'str' object has no attribute 'reader'


Gruss
Thomas
Benutzeravatar
snafu
User
Beiträge: 6745
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hellstern hat geschrieben: Freitag 26. April 2024, 17:36

Code: Alles auswählen

def readCSV(csv):
    writeHistory('csv-File lesen...')
    with open('VNXA99.csv', 'r') as file_raw:
        data_read = csv.reader(file_raw, delimiter=';')
        for zeile in data_read:
            print(zeile)
Fehlerhafte Zeile

Code: Alles auswählen

data_read = csv.reader(file_raw, delimiter=';')
Fehlermeldung
AttributeError: 'str' object has no attribute 'reader'
Naja, du nimmst ``csv`` als Argument der Funktion an und gleichzeitig willst du den ``reader`` des ``csv``-Moduls aufrufen. An der Stelle wird der Modul-Import, den ich hier mal voraussetze, überschrieben durch das Funktionsargument. Letzteres müsstest du einfach umbenennen in ``csv_file`` oder ähnliches. Dann wird es funktionieren.

Im Übrigen ist dir hoffentlich klar, dass du im gezeigten Code das Funktionsargument gar nicht verwendest...
Zuletzt geändert von snafu am Freitag 26. April 2024, 17:48, insgesamt 1-mal geändert.
Hellstern
User
Beiträge: 13
Registriert: Mittwoch 4. Januar 2023, 08:14

Vielen Dank für die die schnelle Antwort
Das war das Problem, jetzt funktioniert es

Das Funktionsargument habe ich nur zum testen nicht verwendet

Gruss
Thomas
Benutzeravatar
__blackjack__
User
Beiträge: 13144
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hellstern: Tja ganz offensichtlich ist der Name `csv` in der Funktion an eine Zeichenkette gebunden. Wie soll der dann auch gleichzeitig noch für das Modul stehen?

Namen werden in Python übrigens klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Was ist denn überhaupt ein `csv`? Wäre es nicht sinnvoller das `csv_filename` zu nennen, oder nur `filename`, denn der CSV-Teil wird ja durch den Funktionsnamen schon klar.

Beim `csv`-Modul muss man beim öffnen der Datei ``newline=""`` angeben. Siehe Dokumentation des Moduls. Und beim öffnen von Textdateien sollte man die Kodierung explizit angebeben. Sonst muss man hoffen, dass die ”Systemkodierung” zufällig die richtige ist.

`file_raw` ist irgendwie Yoda, denn das wäre eher ein `raw_file`. Wobei das `raw` dieses Dateiobjekt ja nicht irgendwie gegen ein anderes abgrenzt, also reicht `file` aus.

`data_read` ist komisch bis falsch. Da sind noch keine gelesenen Daten, das ist ein iterierbares Objekt das die Datensätze erst liest wenn die angefragt werden, und dann auch jeden einzeln. `zeile` stimmt an sich als Name, aber warum ist *der* Name dann in Deutsch während alle anderen Englisch sind? Das wäre konsistenterweise also `row`.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten