2011-10-07 28 views
8

Olası Çoğalt: Ben ilgili bir dizi soru gördük ama hiçbiri doğrudan ele sahip
How to read a CSV line with "?ama görmezden virgül

neyi Yapmaya çalışıyorum. Bir CSV dosyasından metin satırları okuyorum.

Tüm öğeler tırnak içinde ve bazılarında tırnak içinde ek virgül var. Satırları virgülle ayırmak istiyorum, ancak tırnak içine alın. Python'da bunu bir dizi regex ifadesi gerektirmeyen yapmanın bir yolu var mı.

bir örnek: Ben değerlerin 4 ayrı değişkenlere çözümlenen edilmesini istediğiniz

"114111","Planes,Trains,and Automobiles","50","BOOK" 

:

"114111" "Planes,Trains,and Automobiles" "50" "Book" 

ben eksik line.split() basit bir seçenek var mı? olduğu

+8

csv modülünü kullanın – JBernardo

+0

@GregHewgill (ve diğer üç kişi): Gerçekten bir çoğaltma değil. Diğer soru, bir kütüphane kullanmaktan ziyade uygulama detayıyla daha çok ilgilenmektedir. – Johnsyweb

+1

"Bir CSV dosyasından metin satırları okuyorum." O zaman sorunuz gerçekten "Bir CSV dosyasını nasıl ayrıştırırım?" Gerçekten istediğin soruyu cevapla. Sıklıkla hem siz hem de potansiyel yanıtlayıcıları çok fazla zaman tasarrufu sağlar. –

cevap

30

Tekerleği yeniden icat etmeye çalışmayın.

CSV dosyasındaki satırları okumak istiyorsanız, standart kitaplıktan Python'un csv module kullanın.

Örnek:

> cat test.py 
import csv 
with open('some.csv') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print(row) 
> cat some.csv 
"114111","Planes,Trains,and Automobiles","50","BOOK" 

> python test.py 
['114111', 'Planes,Trains,and Automobiles', '50', 'BOOK'] 
[] 

İş bitti!

+1

Teşekkürler, bu bana ihtiyacım olan bilgiyi verdi. :) – chrisfs

+0

@chrisfs: yardımcı olmaktan mutluluk duyuyorum. – Johnsyweb

-5

Muhtemelen üzerinde ayırabilirsiniz "" '[alıntı] [virgül] [alıntı]'

Diğer seçenek, bir kaçış karakteri ile geliyor birileri bir virgül gömmek istiyorsa bu yüzden string yaparlar ve eğer bir ters eğik çizgi yaparlarsa yaparlar \\. Ardından dizeyi ayırmanız, sonra işlemeden önce unescape yapmalısınız.

İlgili konular