Seite 1 von 1

Merkwürdige Inhalt(CSV)

Verfasst: Samstag 10. September 2011, 20:21
von sipatshi
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')



Re: Merkwürdige Inhalt(CSV)

Verfasst: Samstag 10. September 2011, 20:45
von sipatshi
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

Re: Merkwürdige Inhalt(CSV)

Verfasst: Samstag 10. September 2011, 20:47
von cofi
`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?