2013-02-28 4 views
28

Ziel: Um den Text aus dem Anker-Tag in allen Zeilen in models zu extrahieren und es in eine CSV.csv.writer schreiben jedes Zeichen des Wortes in separate Spalte/Zelle

Ich versuche, diesen Code:

with open('Sprint_data.csv', 'ab') as csvfile: 
    spamwriter = csv.writer(csvfile) 
    models = soup.find_all('li' , {"class" : "phoneListing"}) 

    for model in models: 

     model_name = unicode(u' '.join(model.a.stripped_strings)).encode('utf8').strip() 
     spamwriter.writerow(unicode(u' '.join(model.a.stripped_strings)).encode('utf8').strip()) 

Es funktioniert gut, außer jeder Zelle in der csv enthält nur ein Zeichen.

So:

| S | A | M | S | U | N | G | 

Statt:

|SAMSUNG| 

Natürlich habe ich etwas fehlt bin. Aber was?

Antwort

9

writerow akzeptiert eine Sequenz. Du gibst ihm eine einzige Saite, also behandelst du das als Sequenz, und Strings verhalten sich wie Sequenzen von Charakteren.

Was möchten Sie sonst noch in dieser Zeile? Nichts? Wenn ja, machen sie eine Liste von einem Artikel:

spamwriter.writerow([u' '.join(model.a.stripped_strings).encode('utf8').strip()]) 

(By the way, ist die unicode() Anruf völlig unnötig, da Sie bereits mit einem Unicode-Begrenzer verbinden.)

40

.writerow() eine Sequenz erfordert ('', (), []) und platziert jeden Index nacheinander in seiner eigenen Spalte der Zeile. Wenn Sie die gewünschte Zeichenfolge nicht ein Element in einer Sequenz ist, wird writerow() über jeden Buchstaben in Ihrem String iterieren und jeder wird in einer separaten Zelle zu Ihrer CSV geschrieben werden.

nach import csv

Ist dies Ihre Liste ist:

myList = ['Diamond', 'Sierra', 'Crystal', 'Bridget', 'Chastity', 'Jasmyn', 'Misty', 'Angel', 'Dakota', 'Asia', 'Texxxas', 'Desiree', 'Monique', 'Tatiana'] 


listFile = open('Strippers.csv', 'wb') 
writer = csv.writer(listFile) 
for item in myList: 
    writer.writerow(item) 

Das obige Skript erzeugen die folgende CSV: strippers.csv

D,i,a,m,o,n,d 
S,i,e,r,r,a 
C,r,y,s,t,a,l 
B,r,i,d,g,e,t 
C,h,a,s,t,i,t,y 
J,a,s,m,y,n 
M,i,s,t,y 
A,n,g,e,l 
D,a,k,o,t,a 
A,s,i,a 
T,e,x,x,x,a,s 
D,e,s,i,r,e,e 
M,o,n,i,q,u,e 
T,a,t,i,a,n,a 

Wenn Sie jeden Namen wollen in seine eigene Zelle, ist die Lösung einfach Ihre Zeichenfolge (item) in einer Sequenz zu platzieren. Hier verwende ich eckige Klammern []. :

listFile2 = open('Strippers2.csv', 'wb') 
writer2 = csv.writer(listFile2) 
for item in myList: 
    writer2.writerow([item]) 

Das Skript mit .writerow([item]) erzeugt die gewünschten Ergebnisse: Strippers2.csv

Diamond 
Sierra 
Crystal 
Bridget 
Chastity 
Jasmyn 
Misty 
Angel 
Dakota 
Asia 
Texxxas 
Desiree 
Monique 
Tatiana 
+0

Liebe, wie einfach diese Lösung ist. Vielen Dank! – TBirkulosis

Verwandte Themen