CSV

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
oldboyJR
User
Beiträge: 33
Registriert: Donnerstag 28. März 2024, 16:19

Ich habe folgenden Code gefunden
import csv
with open("C:\Users\oldboy\Test.txt", "r") as f:
reader = csv.reader(exel)
your_list = list(reader)

print(your_list)

Zur Vorbereitung habe ich in Exel eine Tabelle geschrieben und sie als CSV Datei gespeichert. Da dieses Beispiel Test.txt als Ausgangsdatei verwendet habe ich die Datei mit note++ umgeändert auf Test.txt. Komischer weise moniert spyder das Komma
File <unknown>:8
with open("C:\Users\oldboy\Test.txt", "r") as f:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Benutzeravatar
__blackjack__
User
Beiträge: 13131
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@oldboyJR: Es wird nicht wirklich das Komma moniert, sondern an der Stelle hat der Compiler aufgegeben weil dort *oder davor* der Fehler ist.

Falls das dort in Deinem Heimatverzeichnis liegt und es okay ist den Pfad nicht absolut, sondern relativ zum Heimatverzeichnis des Benutzers unter dem das ausgeführt wird, könnte man auch das mit `pathlib` auch so ausdrücken: ``Path.home() / "Test.txt"``.

Bei Textdateien sollte man immer die Kodierung mit angeben in der die Daten kodiert sind.

Für das `csv`-Modul muss man beim öffnen noch ``newline=""`` angeben. Siehe Dokumentation von dem Modul.

`f` ist, wie fast alle einbuchstabigen Namen, kein guter Name. Da ist `file` gemeint.

Was ist `exel`? Das wurde nirgends definiert.

`your_list` ist kein guter Name. Der sagt nichts über den Inhalt aus. `rows` wäre ein allgemeiner, passender Name an der Stelle.

Code: Alles auswählen

#!/usr/bin/env python3
import csv
from pathlib import Path


def main():
    path = Path.home() / "Test.txt"
    with path.open("r", newline="", encoding="ASCII") as file:
        rows = list(csv.reader(file))

    print(rows)


if __name__ == "__main__":
    main()
“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
oldboyJR
User
Beiträge: 33
Registriert: Donnerstag 28. März 2024, 16:19

Lehrbuch: Der Parameter csvfile muss eine Referenz auf ein für den Lesezugriff geöffnetes Dateiobjekt sein, aus dem die Daten gelesen werden sollen.
Mit dialect können Sie angeben, in welchem Format die zu lesende Datei geschrieben wurde. Dazu übergeben Sie einen String, der in der Liste enthalten ist, die csv.list_dialects zurückgibt. Alternativ geben Sie eine Instanz der Klasse Dialect an, die wir in Abschnitt 32.6.2 besprechen werden. Standardmäßig wird der Wert "excel" für dialect verwendet, wobei die damit codierten Dateien das Komma als Trennzeichen verwenden.
Sie können einen eigenen Dialekt auch direkt über Schlüsselwortargumente angeben, ohne den Umweg über die Dialect-Klasse zu nehmen. Ein Beispiel, bei dem wir auf diese Weise das Semikolon als Trennzeichen festlegen, sieht folgendermaßen aus:
with open("datei.csv") as f_csv: reader = csv.reader(f_csv, delimiter=";")
Benutzeravatar
__blackjack__
User
Beiträge: 13131
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@oldboyJR: Offenbar dieses Lehrbuch: https://openbook.rheinwerk-verlag.de/python/33_006.html

Die Beispieldaten dort enthalten Umlaute, die Datei wird aber ohne Angabe der Kodierung geöffnet. Und ohne ``newline=""``. Das ist also nicht wirklich gut an der Stelle, das Lehrbuch.
“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
Benutzeravatar
sparrow
User
Beiträge: 4201
Registriert: Freitag 17. April 2009, 10:28

Das Buch wurde hier bereits mehrfach diskutiert und festgestellt, dass die Qualität deutlich zu wünschen übrig lässt.
Wenn ich mich richtig erinnere ist das "wir programmieren Java in Python".
oldboyJR
User
Beiträge: 33
Registriert: Donnerstag 28. März 2024, 16:19

Danke Cathy Ladman das Buch Phython3 Von Johannes Ernesti und Peter Kaiser 7Auflage Rheinwerkverlag macht wohl immer die selben Fehler und hat das publizieren der Listings eingestellt.

Dein Listing war nicht ganz Problemlos. Natürlich habe ich im Buch nach Lösungen gesucht. Vergeblich!!! aber nach vielen Probieren und umschreiben deines Listings und Rückkehr dazu muß ich zum Schluss feststellen alles funktioniert aber nicht das encoding anstatt "ASCII" "utf 8" Gedruckt wurde mit ASCII nur [ ]

Code: Alles auswählen

  def main():
    path = Path.home() / "NamenB.csv"
    with path.open("r", newline="", encoding="utf 8") as file:
        rows = list(csv.reader(file))

    print(rows)


if __name__ == "__main__":
    main()
    
Benutzeravatar
__blackjack__
User
Beiträge: 13131
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@oldboyJR: Zu dem Zeitpunkt kannte ich die Quelle ja noch nicht. Und mit Quellte hätte ich auch nur gewusst, das ASCII nicht ausreichen wird, aber nicht welche Kodierung die passende ist. Das musst letztendlich Du wissen.
“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
Benutzeravatar
DeaD_EyE
User
Beiträge: 1023
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Encodings bei Windows:

cp1252, latin1, utf8

Generell utf8 zu verwenden funktioniert unter Linux in 99% der Fälle fehlerfrei.
Unter Windows erlebe ich regelmäßig, dass diese 3 genannten Encodings vorkommen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten