Seite 1 von 1

Liste in CSV-Datei und richtiger Spalte schreiben

Verfasst: Donnerstag 14. Mai 2020, 17:37
von m.g.o.d
Hallo Zusammen,

folgendes Programm habe ich mit folgendem Problem:

Code: Alles auswählen

# Tabelle mit festgelegter Struktur     
stored_data_url=stored_data_url.split()
stored_data_query=stored_data_query.split()

ich habe folgende Liste:

Code: Alles auswählen

 final = [stored_data_url] + [stored_data_query] + [results_all] + [date_new] + [time_new]
Diese Liste hat folgenden Inhalt:
final[0] = ['https://www.kenfm.de', 'https://www.br.de']
final[1] = ['Corona', 'Pandemie']
final[2] = ['670’, '897']
final[3] = ['14.15.2020’]
final[4] = ['18.30.0’]

Diese Liste schreibe ich dann in eine csv.Datei:

Code: Alles auswählen

 # in csv Datei schreiben
        c=0
        for element in results_all:
            a.writelines(str(final[0][c]) + ";" + str(final[1]) + ";" + str(final[2][c]) + ";" + str(final[3]) + ";" + str(final[4]) + ";" + "\n")
            c += 1
Das sieht dann im Ergebnis so aus:
Webseite Eingabe Trefferzahl Datum der Abfrage Uhrzeit der Abfrage
https://www.kenfm.de ['Corona' 'Pandemie'] 639 14.5.2020 18.13.18

Das Problem ist, unter der Spalte Eingabe wird der erste String "Corona" geschrieben und anschließend wird in der nächsten Spalte Trefferzahl der zweite String "Pandemie" geschrieben. Ich verstehe aber nicht, warum nicht der gesamte Feldinhalt final[1] in die Spalte "Eingabe" geschrieben wird.


Kann mir jemand sagen, wo der Fehler liegt? Ich wäre mega dankbar.

VG Marc

Re: Liste in CSV-Datei und richtiger Spalte schreiben

Verfasst: Donnerstag 14. Mai 2020, 19:07
von sparrow
Das, was du zeigst, kann nicht das Ergenis sein.
Du schreibst Semikolons in die Datei, die sehe ich da nicht.

Für das Schreiben von csv: Benutze das csv-Modul.

Re: Liste in CSV-Datei und richtiger Spalte schreiben

Verfasst: Donnerstag 14. Mai 2020, 20:05
von noisefloor
Hallo,

mal abgesehen vom Phänomen der fehlenden Semikolons: dein Code macht doch, was er soll.
Ich verstehe aber nicht, warum nicht der gesamte Feldinhalt final[1] in die Spalte "Eingabe" geschrieben wird.
Wird er doch?! Da schreibst fünf Spalten und die von dir gezeigt Ausgabe hat fünf Spalten.

spalte[1] ist eine Liste, und wenn man die in einen String wandelt, kommt genau das raus, was du siehst.

Code: Alles auswählen

>>> a = ['a', 'b']
>>> str(a)
"['a', 'b']"
>>>
Eine Liste in einen String wandeln ist zwar fragwürdig, weil das Ergebnis relativ sinnlos ist.

Und du solltest dir dringend das csv-Modul von Python anschauen. Und Strings stückelt man nicht mit + oder so zusammen, sondern mit der `format` Methode von Strings oder man nutzt f-Strings (ab Python 3.6).

Gruß, noisefloor

Re: Liste in CSV-Datei und richtiger Spalte schreiben

Verfasst: Freitag 15. Mai 2020, 14:46
von __blackjack__
@m.g.o.d: Was an der gezeigten Schleife auch merkwürdig ist, ist das offenbar kein leicht ersichtlicher Zusammenhang zwischen `results_all` und der Laufvariable `element` und dem Schleifenkörper mit `final` besteht, denn `element` wird überhaupt nicht verwendet.

So etwas ähnliches hattest Du im Thema Liste splitten ohne Umwandlung in STR schon mal wo `link` in einer Schleife nicht verwendet wurde.