2013-05-14 120 views
1

解析CSV文件時,每個人都需要「['','']」。當使用python csv模塊

我想用這個來解析一個CSV "20568078","240431","jpg","St, Carolina 1920",,["20568078","240431","jpg","St, Carolina 1920","",""]

string=r'"20568078","240431","jpg","St, Carolina 1920",,' 
reader = csv.reader(string) 
for r in reader: 
    print (r) 

我得到的輸出:

['20568078'] 
['', ''] 
['240431'] 
['', ''] 
['jpg'] 
['', ''] 
['St, Carolina 1920'] 
['', ''] 
['', ''] 

我想konw如何刪除不必要['', ''] ,並將最後兩個,,更改爲""""

謝謝。

回答

4

使用StringIO治療這種蜇傷的類似文件的對象

>>> import csv 
>>> from StringIO import StringIO 
>>> string=r'"20568078","240431","jpg","St, Carolina 1920",,' 
>>> for r in csv.reader(StringIO(string)): 
     print (r) 


['20568078', '240431', 'jpg', 'St, Carolina 1920', '', ''] 

http://docs.python.org/2/library/csv.html#csv.reader

csv.reader(csvfile, dialect='excel', **fmtparams)

返回讀者對象,它會遍歷給定csvfile線。 csvfile可以是任何支持迭代器協議的對象,每次調用next()方法時都會返回一個字符串 - file對象和list對象都適用。

您的代碼存在的問題是您將單個字符串傳遞給reader。讀者然後將每個字符解釋爲。例如。

>>> string=r'"20568078","240431","jpg","St, Carolina 1920",,' 
>>> i = iter(string) 
>>> next(i) 
'"' 
>>> next(i) 
'2' 

大約是如何csv電話next您傳遞給它的迭代。但是,您使用雙引號表示多行字符串,這就解釋了爲什麼它們都是一個整體。

+0

+1學到新的東西 – HennyH 2013-05-14 06:46:01

+1

所以發生了什麼事在OP的代碼? – Eric 2013-05-14 06:51:39

+0

@Eric我更新了那個信息 – jamylak 2013-05-14 07:00:46

2

你可以傳遞一個字符串列表來csv.reader構造:

>>> import csv 
>>> string=r'"20568078","240431","jpg","St, Carolina 1920",,' 
>>> reader = csv.reader([string]) 
>>> print reader.next() 
['20568078', '240431', 'jpg', 'St, Carolina 1920', '', ''] 
+0

+1但是,如果字符串包含換行符,這將不會工作 – jamylak 2013-05-14 06:56:51

+0

@jamylak好的,請記住。 – 2013-05-14 06:57:43

+0

引號字符串內的換行符雖然可以。 – 2013-05-14 07:09:22