2011-07-29 12 views
12

Bence bu muhtemelen basit bir şey, ama bir saatlik aramanın ardından, yanlış yaptığımı anladığım için hiç şansım olmadı.Python CSV okuyucu neden çift tırnaklı alanları görmezden geliyor?

Bir CSV dosyasını okumak için aşağıdaki kodu kullanıyorum - dosyayı okumada sorun yaşıyorum ancak bir sınırlayıcı içerdiği için satır çift tırnaklı bir alan içerdiğinde, CSV okuyucu çiftleri yok sayar. alıntı yapar ve alanı 2 ayrı alana ayırır. İşte

ben kullanıyorum kodu:

myReader = csv.reader(open(inPath, 'r'), dialect='excel', delimiter=',', quotechar='"') 
for row in myReader: 
    print row, 
    print len(row) 

Benim girişi:

hello, this is row 1, foo1 
hello, this is row 2, foo2 
goodbye, "this, is row 3", foo3 

bana veriyor: o tanıyacak Öyle değiştirmem gerekiyor ne

['hello', ' this is row 1', ' foo1'] 3 
['hello', ' this is row 2', ' foo2'] 3 
['goodbye', ' "this', ' is row 3"', ' foo3'] 4 

çift ​​tırnaklı alan tek alan mı? Python sürüm 2.6.1 kullanıyorum.

Teşekkürler! csv tırnak önce boşluk olduğundan

cevap

22

, sen excel lehçesi şöyle yapılandırılmış olduğunu göreceksiniz. Sadece bunu okuyucunuza aktar. Oh ve bu arada, geçtiğiniz tüm alanlar Yani csv.reader

geçirilen varsayılan lehçesi parametredir excel lehçesi kullanılarak varsayılan zaten, çok sevdiği kodu yeniden yazardı :

>>> with open(inPath) as fp: 
>>>  reader = csv.reader(fp, skipinitialspace=True) 
>>>  for row in reader: 
>>>   print row, 
>>>   print len(row) 
['hello', 'this is row 1', 'foo1'] 3 
['hello', 'this is row 2', 'foo2'] 3 
['goodbye', 'this, is row 3', 'foo3'] 3 
4

Bu açıklanmıştır:

one0, one1, one2 
two0, two1, two2 
tre0, "tr,e1", tre2 

one0,one1,one2 
two0,two1,two2 
tre0,"tr,e1",tre2 

vs Önce bu ekstra boşlukları kaldırmak gerekir. skipinitialspace false olarak ayarlanır

class excel(Dialect): 
    """Describe the usual properties of Excel-generated CSV files.""" 
    delimiter = ',' 
    quotechar = '"' 
    doublequote = True 
    skipinitialspace = False 
    lineterminator = '\r\n' 
    quoting = QUOTE_MINIMAL 

Bildirim o: Kullandığınız lehçesi bakarsak

+0

Bu yanlış: 'csv.reader()', bu boşluklarla başa çıkmak için 'atlama başlangıç ​​alanını' seçeneğine sahiptir. – MERose

İlgili konular