CSV aus dem Web laden und zerlegen ?

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
ThomasDD
User
Beiträge: 14
Registriert: Mittwoch 29. November 2017, 11:24

Hallo,

ich lade eine CSV-Datei die mit einem Texteditor betrachtet prinzipiell etwa so aussieht

1,aaa,bbb
2,ccc,ddd

aus dem Web mit den Befehlen

Code: Alles auswählen

a = requests.get(url)
b = a.content.decode()
Ziel ist: die einzelnen mit ',' getrennten Elemente pro Zeile herausholen.

print(b) zeigt mir dann auch eine Liste einzelner Zeilen wie oben beim Editor angegeben an, die man dann splitten könnte mit ',' als Trennzeichen.

Aber,

Code: Alles auswählen

for c in b:
    print(c)
bringt dann als 'c' jedes einzelne Zeichen aus der csv-Datei, alles senkrecht untereinander.


Wie könnte man das Ziel am besten erreichen ?

Danke,
Thomas
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

in dem du das csv-Modul nimmst, dass Python standardmäßig an Bord hat. Das ist genau dafür gemacht.

Doku: https://docs.python.org/3.5/library/csv.html

Gruß, noisefloor
ThomasDD
User
Beiträge: 14
Registriert: Mittwoch 29. November 2017, 11:24

Danke ja das hatte ich auch schon probiert ev. nur nicht richtig.Das Teil hat dann immer sowas wie ['text'] gebracht.

Mit b.content.decode().split("\n") kommen die Zeilen jetzt erstmal so wie im File wieder raus.
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

die Fehlen dann definitiv die Python-Grundlagen. Du solltest vielleicht nochmal das offizielle Python-Tutorial durchlesen...
Das Teil hat dann immer sowas wie ['text'] gebracht.
Das ist ja auch richtig so. Das csv-Modul liest die Datei standardmäßig ein (wenn du `csv.reader(...) ` benutzt und liefert dir eine Liste von Listen zurück. Über die Liste kannst du dann iterieren, jeder Iterationsschritt liefert dir eine Zeile der Datei als Liste zurück. Auf die kannst du per Index-Zugriff zugreifen.

Das ist absoluter Python-Standard, das kommt sehr sehr sehr oft vor.

Gruß, noisefloor
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Du könntest Dir auch mal diesen Code-Schnipsel ansehen:

Code: Alles auswählen

import pandas as pd

url="https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv"
c=pd.read_csv(url)
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@pixewak: aus welchem Grund sollte man denn hier Pandas einsetzen? Basierend auf dem Ausgangspost hat das null Vorteil - bzw. für den TE eher noch den Nachteil, dass er sich noch zusätzlich mit Pandas und den Zugriff auf DataFrames in Pandas auseinander setzen muss.

Gruß, noisefloor
ThomasDD
User
Beiträge: 14
Registriert: Mittwoch 29. November 2017, 11:24

Danke ja wird schon alles werden, aller Anfang ist schwer,Ich hab das dicke Python3-Buch https://www.amazon.de/dp/3836258641/ref ... iAbCM4TSZR das zieh ich mir nach und nach rein :)


So gehts jetzt erstmal prima und genau wie es soll

Code: Alles auswählen

b=a.content.decode().split("\n")
for c in b:
    d = c.split(",")
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das kann man so machen, wobei du da "nur" das nachbaust, was das csv-Modul besser kann. Besser im Sinne von, dass das csv-Modul alle möglichen Strukturen einer CSV-Datei berücksichtige (z.B. Quoting, Escaping etc.) - was du nicht tust.

In dem "dicken Buch" ist das csv-Modul aber auch beschrieben, AFAIK.

Gruß, noisefloor
Antworten