2013-02-28 10 views
28

Cel: Aby wyodrębnić tekst ze znacznika zakotwiczenia wewnątrz wszystkich linii w models i umieścić go w pliku CSV.csv.writer pisanie każdej litery słowa w osobnej kolumnie/komórce

Próbuję ten kod:

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()) 

To działa dobrze, z wyjątkiem każdej komórki w CSV zawiera tylko jeden znak.

Jak to:

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

Zamiast:

|SAMSUNG| 

Oczywiście, że jestem czegoś brakuje. Ale co?

Odpowiedz

9

writerow akceptuje sekwencję. Dajesz mu pojedynczy ciąg, więc traktujesz to jako sekwencję, a łańcuchy zachowują się jak ciągi znaków.

Co jeszcze chcesz w tym rzędzie? Nic? Jeśli tak, sprawiają, że lista z jednej pozycji:

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

(Nawiasem mówiąc, wywołanie unicode() jest całkowicie zbędne, ponieważ jesteś już łączenie z separatorem Unicode.)

40

.writerow() wymaga sekwencję ('', (), []) i kolejno umieszcza każdy indeks w swojej własnej kolumnie w rzędzie. Jeśli żądany ciąg nie jest elementem w sekwencji, writerow() będzie iterować nad każdą literą w łańcuchu, a każdy z nich zostanie zapisany w pliku CSV w osobnej komórce.

po import csv

Jeśli jest to Twoja lista:

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) 

Powyższy skrypt będzie produkować następujące 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 

Jeśli chcesz każdą nazwę w to własna komórka, rozwiązaniem jest po prostu umieszczenie łańcucha znaków (item) w sekwencji. Tutaj używam nawiasów kwadratowych []. :

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

Skrypt z .writerow([item]) daje pożądane rezultaty: Strippers2.csv

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

Miłość jak proste jest to rozwiązanie. Dzięki! – TBirkulosis

Powiązane problemy