2013-02-21 47 views
5

我已經做了一些搜索,但大多數的答案是關於閱讀一個完整的CSV文件,這些都不是我面臨的問題。Python - 如何讀取/解析csv像線?

我試圖從網上使用的urllib2讀取文件:

request = urllib2.Request('http://.../tv.txt') 
response = urllib2.urlopen(request) 
lines = response.readlines() 
for line in lines: 
    ... 

的「線」格式如下這些:

"ABC", "XYZ,MNO", "KLM" 
"ABC", "MN" 
"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY" 

從上面可以看出,這些線實際上不是CSV線。列數不斷變化。

有沒有辦法將每一行分割成一個列表?慾望的結果應該是:

["ABC", "XYZ,MNO", "KLM"] 
["ABC", "MN"] 
["ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"] 

我使用line.split(「」)嘗試,但因爲有每對雙引號內逗號不能正常分裂。

請幫助我,如果你知道如何。非常感謝你。

Cheers,

PHP-Python-Java-MySQL-newbie。

回答

8

使用csv模塊,它可以滿足您的需求。

yourstring= '"ABC", "XYZ,MNO", "KLM"\n"ABC", "MN"\n"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"' 

import csv 
import StringIO 

class MyDialect(csv.Dialect): 
    strict = True 
    skipinitialspace = True 
    quoting = csv.QUOTE_ALL 
    delimiter = ',' 
    quotechar = '"' 
    lineterminator = '\n' 


b=StringIO.StringIO(yourstring) 
r=csv.reader(b,MyDialect()) 

for i in r: 
    print len(i), ':',' @ '.join(i) 
+1

正如問題中提到的,我試過csv模塊。如果你能指出我在csv模塊中有什麼功能,那會很棒。我曾嘗試 在csv.reader行([行]): 打印行 每本http://docs.python.org/2/library/csv.html#examples但沒有成功 – markbse 2013-02-21 18:10:15

+0

清楚了現在夠了嗎? – LtWorf 2013-02-21 22:50:15

+0

謝謝。在等待時,我已經將源代碼從CSV更改爲JSON格式,因此未測試您的腳本,但會將其標記爲答案。 – markbse 2013-02-23 22:33:10