Seite 1 von 1

CSV

Verfasst: Montag 22. April 2024, 11:21
von oldboyJR
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

Re: CSV

Verfasst: Montag 22. April 2024, 12:16
von grubenfox
Der gefundene Code ist offensichtlich kaputt... Writing Windows Paths in Python 3: A Guide to String Literals

Re: CSV

Verfasst: Montag 22. April 2024, 13:14
von __blackjack__
@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()

Re: CSV

Verfasst: Montag 22. April 2024, 13:26
von oldboyJR
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=";")

Re: CSV

Verfasst: Montag 22. April 2024, 13:50
von __blackjack__
@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.

Re: CSV

Verfasst: Montag 22. April 2024, 17:43
von sparrow
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".

Re: CSV

Verfasst: Dienstag 23. April 2024, 16:27
von oldboyJR
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()
    

Re: CSV

Verfasst: Mittwoch 24. April 2024, 21:54
von __blackjack__
@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.

Re: CSV

Verfasst: Donnerstag 25. April 2024, 08:41
von DeaD_EyE
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.