Merkwürdige Inhalt(CSV)

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
sipatshi
User
Beiträge: 4
Registriert: Samstag 10. September 2011, 16:24

Hallo Gemeinde,

leider bekomme ich nicht die erwartete Ausgabe! Was mache ich falsch?

Ausgabe
=========
"s";"o";"m";"e";"-";"t";"e";"x";"t"

"s";"o";"m";"e";"-";"t";"e";"x";"t"

"s";"o";"m";"e";"-";"t";"e";"x";"t"

"s";"o";"m";"e";"-";"t";"e";"x";"t"

Erwartete Ausgabe
===============
"some-text"
"some-text"
"some-text"

Code
========

Code: Alles auswählen

import urllib.request
import re
import os
import csv

result = str(urllib.request.urlopen('http://www.domain.de/').read());
lists   = re.compile('pattern').findall(result);
writer = csv.writer(open('test.csv', 'w'), delimiter = ';', quotechar = '"', quoting = csv.QUOTE_ALL);

for list in lists:
    print(list);                #"some-text" -> Die Ausgabe mit Print ist korrekt! 
    writer.writerow(list); # '"s";"o";"m";"e";"-";"t";"e";"x";"t"

os.system('CLS')


sipatshi
User
Beiträge: 4
Registriert: Samstag 10. September 2011, 16:24

Hallo,

habe mein Fehler gefunden!

Code: Alles auswählen

for list in lists:
    print(list);                
    writer.writerow(list);     #<- falsch!
    writer.writerrow([list]) ; #<- richtig! list in einem Array packen!
Gruß

Sipatshi
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

`list` ist keine Liste, sondern ein String. Strings sind wie Listen Sequenzen und `writerow` arbeitet mit Sequenzen (oder generell allem iterierbarem), d.h. `writerow` schnappt sich jedes Zeichen aus dem String und schreibt es raus.

Neben der Tatsache, dass `list` keine Liste ist, ist es auch sonst ein schlechter Name, weil es den Listen-Konstruktor ueberschreibt. Mit dem kann man sich z.b. anschaun, wie `writerow` dein `list` abarbeitet:

Code: Alles auswählen

In [2]: list('dies ist ein string')
Out[2]: 
[u'd',
 u'i',
 u'e',
 u's',
 u' ',
 u'i',
 u's',
 u't',
 u' ',
 u'e',
 u'i',
 u'n',
 u' ',
 u's',
 u't',
 u'r',
 u'i',
 u'n',
 u'g']
Und werde die Semikola los. Ist ja widerlich.

Edit: Deine "Loesung" doktert nur an dem Symptom herum. Das Problem ist, dass du ein-elementige CSV schreibst. Warum dann ueberhaupt CSV?
Antworten