使用python csv模块解析CSV文件时不必要的“['','']”

时间:2013-05-14 06:42:23

标签: 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']
['', '']
['', '']

我想了解如何删除不必要的['', ''],并将最后两个,,更改为""""

谢谢。

2 个答案:

答案 0 :(得分:4)

使用StringIO将此stings视为类似文件的对象

>>> 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的方式。但是,你使用代表多行字符串的双引号来解释为什么它们都是一体的。

答案 1 :(得分: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', '', '']