bestimmte Spalten aus einer CSV Datei lesen ohne Module

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
xTheSaviour
User
Beiträge: 8
Registriert: Freitag 7. Januar 2022, 08:23

Hi, hoffe das ich das gut genug erläutern kann^^

Ich habe Probleme dabei die richtigen Spalten aus einer CSV Datei lesen zu lassen. Das Problem ist das ich keine Module verwenden darf, nicht mal das csv Modul.

Ich habe bereits versucht über eine Schleife Listen erstellen zu lassen und die Elemente der Liste dann auf Variablen aufzuteilen. Mit Test Dateien funktioniert das auch, aber die CSV Datei mit der ich arbeiten muss für die Hausarbeit erzeugt Probleme, da dort die Schleife in den Zeilen mehrere Werte entdeckt, da dort mal mehr und weniger Einträge pro Zellen mit kommas und ähnlichem getrennt sind.

Daher dachte ich daran direkt auf die Spalten zu zugreifen die ich benötige. Aber mir fehlt der Denkanstoß wie das gelingen kann ohne zusätzliche Module.

Lerne Python erst seit 3 Monaten, also benutzt bitte Worte die auch ich verstehe :)

with open ("Zustandsnoten.csv","r") as test:

next(test)

for line in test:

line = line.split()

print(line)

print benutz ich da nur um zu schauen was Python daraus gemacht hat, das kann man auch weg lassen^^

Das ist was ich gerade hab, aber keine Ahnung wie ich in die 7,9 und 10 Spalte springen kann und die anderen ignorieren kann. Eine Liste pro Zeile aus den Spalten 7,9,10 wäre perfekt, damit könnte ich weiter kommen. Sitze schon seit einigen Tagen dran, hoffe jemand kann mir helfen :)

Danke schonmal und liebe Grüße.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ohne zu zeigen wie die Daten aussehen, kann man da nicht viel zu sagen.

Außer das split am trennzeichen erfolgen sollte. Nicht an einem Leerzeichen, wie bei dir.
xTheSaviour
User
Beiträge: 8
Registriert: Freitag 7. Januar 2022, 08:23

__deets__ hat geschrieben: Freitag 7. Januar 2022, 09:29 Ohne zu zeigen wie die Daten aussehen, kann man da nicht viel zu sagen.

Außer das split am trennzeichen erfolgen sollte. Nicht an einem Leerzeichen, wie bei dir.
nach der Überschrift die man ja mit next überspringen kann, die ersten 5 Zeilen von 56.000^^

Gibt es keine Möglichkeit direkt in die Spalten zu springen? brauche die 1,3 die 2.9 die 2,4 usw.

und eben noch die geografischen breiten 53,....... und 7,......

Danke für deine Antwort :)

7921623 0 B 311; Geh- und Radwegunterführung unter d. KSE/BW-Nr. 13 KSE (bisherige BW-Nr. 07 KSE) "KSE", Kernstadtentlastungsstraße, Mühlenweg B 311 G+R 1,3 II 523968 5321793 48,0489692022056 9,32161088395051 https://www.google.de/maps/@48.04896920 ... 950505,16z
4103540 0 Netterdenscher Kanal `s-Heerenberg B 220 2,9 II 311041 5749985 51,8686000951863 6,25530317344557 https://www.google.de/maps/@51.86860009 ... 445565,16z
2413520 0 Jev4, B210, km 60,160, B210 ü. Wl. Hooksieler Tief/ 26441 Jever B 210 G 2,4 II 428944 5937246 53,5792500200845 7,92676989230911 https://www.google.de/maps/@53.57925002 ... 309108,16z
2413523 0 Jev6, B210, km 58,519, L807 über B210/ 26441 Jever L 807 B 210 2,3 - 429840 5935354 53,5623671859035 7,94072557388052 https://www.google.de/maps/@53.56236718 ... 880515,16z
2413522 0 Jev5a, B210, km 59,435, Wirtschaftsweg über B210/ 26441 Jever WiWeg. B 210 2,5 - 429453 5936188 53,5698104797773 7,93469541681574 https://www.google.de/maps/@53.56981047 ... 157415,16z
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, es gibt keine Möglichkeit direkt zu springen. Warum sonst glaubst du gibt es Module, die du nicht benutzen darfst, wenn es eine Möglichkeit dazu gäbe, welche diese Module überflüssig machen würde?

Aus den Daten finde ich es schwer, das Trennzeichen zu ermitteln. Weder Komma noch Semikolon kann ich nehmen, ersteres scheint in den Daten vorzukommen, letzteres nur im ersten Datensatz.

Woher kommen die Daten? Ist dir dazu etwas gesagt worden, wie die aufgebaut sind?
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Ich sehe nicht, dass das csv ist. Weder vom Namen noch vom Sinn. Das sind einfach hintereinander weg geschriebene Daten.

Die einzige Möglichkeit wäre die Spalten von hinten zu indexieren und hoffen, dass die konsistent sind.
xTheSaviour
User
Beiträge: 8
Registriert: Freitag 7. Januar 2022, 08:23

__deets__ hat geschrieben: Freitag 7. Januar 2022, 10:18 Nein, es gibt keine Möglichkeit direkt zu springen. Warum sonst glaubst du gibt es Module, die du nicht benutzen darfst, wenn es eine Möglichkeit dazu gäbe, welche diese Module überflüssig machen würde?

Aus den Daten finde ich es schwer, das Trennzeichen zu ermitteln. Weder Komma noch Semikolon kann ich nehmen, ersteres scheint in den Daten vorzukommen, letzteres nur im ersten Datensatz.

Woher kommen die Daten? Ist dir dazu etwas gesagt worden, wie die aufgebaut sind?
Das einzige was mir dazu einfällt ist Zitat: "Es handelt sich bei der CSV Datei um eine Tabulator getrennte Datei"
xTheSaviour
User
Beiträge: 8
Registriert: Freitag 7. Januar 2022, 08:23

sparrow hat geschrieben: Freitag 7. Januar 2022, 10:20 Ich sehe nicht, dass das csv ist. Weder vom Namen noch vom Sinn. Das sind einfach hintereinander weg geschriebene Daten.

Die einzige Möglichkeit wäre die Spalten von hinten zu indexieren und hoffen, dass die konsistent sind.
Wie geht das? f´gibt es dazu ein Tutorial oder so? Ich schau gleich auch selber, aber wenn du ein gutes kennst würde ich mich über einen Link freuen :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da hast du doch deine Antwort. Trennzeichen ist der Tabulator. Das muss zum trennen mit split benutzt werden.
xTheSaviour
User
Beiträge: 8
Registriert: Freitag 7. Januar 2022, 08:23

xTheSaviour hat geschrieben: Freitag 7. Januar 2022, 10:27
sparrow hat geschrieben: Freitag 7. Januar 2022, 10:20 Ich sehe nicht, dass das csv ist. Weder vom Namen noch vom Sinn. Das sind einfach hintereinander weg geschriebene Daten.

Die einzige Möglichkeit wäre die Spalten von hinten zu indexieren und hoffen, dass die konsistent sind.
Wie geht das? f´gibt es dazu ein Tutorial oder so? Ich schau gleich auch selber, aber wenn du ein gutes kennst würde ich mich über einen Link freuen :)
So wie ich es jetzt habe macht er daraus eine Liste mit einem Element pro Spalte, wenn ich das richtig sehe;

['6205775', '1', '"ÜFG.WW/B51"', '"WiWeg."', '"B', '51"', '2,2', '"kZN"', '325170', '5508613', '49,7046267950893', '6,57523041670698', '"https://www.google.de/maps/@49.70462679 ... 706979,16z"']

Das ist die letzte Zeile die er mir ausgibt, wenn ich zum schluss print eingebe. Könnte ich mich nicht an den strings entlang hangeln und sagen überspring die ersten 6 strings oder so?

Ich probier parallel auch Sachen aus ^_^

Aber danke für deine Hilfe :)
xTheSaviour
User
Beiträge: 8
Registriert: Freitag 7. Januar 2022, 08:23

__deets__ hat geschrieben: Freitag 7. Januar 2022, 10:28 Da hast du doch deine Antwort. Trennzeichen ist der Tabulator. Das muss zum trennen mit split benutzt werden.
hmm ok, danke ich werd es weiter probieren :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte nicht immer die Posts davor zitieren. Die stehen da schon.

Und wenn du eine Liste hast (die du bekommst, wenn du am RICHTIGEN Trennzeichen trennst), dann ist das doch was du willst. Da muss nix gehangelt werden. Sondern mit dem richtigen Index einfach drauf zugegriffen werden.
xTheSaviour
User
Beiträge: 8
Registriert: Freitag 7. Januar 2022, 08:23

Danke Leute, ich glaub ich komm jetzt weiter, weil das glaube ich mit den Indizes funktioniert.. line[7] z.b. wenn ich das richtig verstanden habe :D Hab es eben ausprobiert der gab mir direkt ein Element aus der Liste dazu aus, zwar das falsche, aber es ist ein Fortschritt..

Dankeschön ♥

Und sry für´s unnötige zitieren, dachte dann lassen sich meine Antworten leichter zuordnen^^
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Dein letzter Datensatz zeigt schön, dass Du wirklich einen kompletten csv-Reader programmieren mußt.

Code: Alles auswählen

['6205775',
 '1',
 '"ÜFG.WW/B51"',
 '"WiWeg."',
 '"B',
 '51"',
 '2,2',
 '"kZN"',
 '325170',
 '5508613',
 '49,7046267950893',
 '6,57523041670698',
 '"https://www.google.de/maps/@49.70462679 ... 706979,16z"']
Erster Punkt ist, dass Du das falsche Encoding zum Lesen benutzt hast. Das richtige Encoding (utf8) mußt Du bei `open` explizit angeben. Dann gibt es einige Zellen, die mit " eingeschlossen sind. Dass es sich hier nicht nur um Kosmetik handelt, sieht man am vierten Eintrag, der eigentlich "B\t51" heißt, da Du aber unabhängig der Anführungszeichen an jedem Tab splittest, werden daraus zwei Zellen.
Einen korrekten csv-Parser zu schreiben, geht weit über Anfängerniveau hinaus, was entweder Ziel der Aufgabe sein soll, oder einfach der Ignoranz des Lehrers geschuldet ist.
xTheSaviour
User
Beiträge: 8
Registriert: Freitag 7. Januar 2022, 08:23

Diesmal zitiere ich nicht :D

Erstmal danke Sirius für deine Antwort.

Ich habe das Problem jetzt so gelöst;

with open ("Zustandsnoten.csv","r") as test:

next(test)

for line in test:

line = line.split("\t")

b = float(line[6].replace(",","."))

c = float(line[10].replace(",","."))

d = float(line[11].replace(",","."))

Danke nochmal für die Hilfe deets und Sirius für deine Zeit :)
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Und genau das ist es, was ich meinte mit „Du aber unabhängig der Anführungszeichen an jedem Tab splittest,“. Wenn es bei Deinen Daten funktioniert, hast Du Glück, keiner garantiert Dir aber, dass Du immer die richtigen Spalten erwischst. An Deinen Variablennamen mußt Du noch arbeiten, `b`, `c` und `d` sind schlechte Namen für Koordinaten und was auch immer b ist.
nezzcarth
User
Beiträge: 1765
Registriert: Samstag 16. April 2011, 12:47

Noch etwas Besserwisserei am Rande: Was du da hast, ist streng genommen eigentlich keine CSV- sondern eine TSV-Datei (C=Comma (meistens; Character ist, denke ich, eine nachträgliche Neuinterpretation), T=Tab). Die Dateiendung ist daher eigentlich nicht korrekt; sie müsste tsv sein. Zumindest das kann man unter "Ignoranz des/der Lehrenden" verbuchen (auch wenn das zugegebener maßen gefühlt mehr falsch als richtig gemacht wird; aber irgendwo muss man ja mal anfangen :) ).
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ganze kommt mir so bekannt vor aus Programm zum Anzeigen von bestimmten Werten auf Karte. Demnach wäre `b` die Zustandsnote. Erklärung zur Bedeutung der Zustandsnote gibt's in dem PDF das man sich von der Bundesanstalt für Straßenwesen (BASt) herunterladen kann, von der Seite, die ich im anderen Thema verlinkt habe.

Ist das hier die gleiche Aufgabe, oder soll hier etwas anderes mit den Daten gemacht werden?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten