【发布时间】:2013-12-02 11:55:08
【问题描述】:
我有一些逗号分隔的输入要解析成字典,所以csv.DictReader 似乎很合适。但是,输入已经是字符串形式,而不是 csv.DictReader 想要的接口的文件。
有没有办法直接将csv.DictReader 与字符串一起使用?
【问题讨论】:
标签: python python-2.7 csv
我有一些逗号分隔的输入要解析成字典,所以csv.DictReader 似乎很合适。但是,输入已经是字符串形式,而不是 csv.DictReader 想要的接口的文件。
有没有办法直接将csv.DictReader 与字符串一起使用?
【问题讨论】:
标签: python python-2.7 csv
您可以使用任何可迭代的生产线,它不仅是文件对象。您可以使用str.splitlines() 将字符串拆分为行列表:
for row in csv.DictReader(inputtext.splitlines()):
print row
演示:
>>> import csv
>>> demostring = '''\
... foo,bar,baz
... 42,Monty,Python
... 38,Ham,Spam
... '''
>>> for row in csv.DictReader(demostring.splitlines()):
... print row
...
{'foo': '42', 'baz': 'Python', 'bar': 'Monty'}
{'foo': '38', 'baz': 'Spam', 'bar': 'Ham'}
【讨论】:
您可以使用StringIO(或io.BytesIO/io.StringIO):
>>> import StringIO
>>> import csv
>>>
>>> f = StringIO.StringIO(u'''field1,field2,field3
... 1,2,3
... 4,5,6
... 7,8,9
... ''')
>>>
>>> for row in csv.DictReader(f):
... print row
...
{'field2': '2', 'field3': '3', 'field1': '1'}
{'field2': '5', 'field3': '6', 'field1': '4'}
{'field2': '8', 'field3': '9', 'field1': '7'}
【讨论】: