Liste in CSV-Datei und richtiger Spalte schreiben

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
m.g.o.d
User
Beiträge: 75
Registriert: Samstag 4. April 2020, 13:17

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
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

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.
Benutzeravatar
noisefloor
User
Beiträge: 4193
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten