Python csv.DictReader:解析字符串?

2024-06-01 13:34:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用requests从URL直接下载CSV文件。

如何使用csv.DictReader解析结果字符串?

现在我有这个:

r = requests.get(url)
reader_list = csv.DictReader(r.text)
print reader_list.fieldnames
for row in reader_list:
    print row

但是我只是得到['r']作为fieldnames的结果,然后从print row得到各种奇怪的东西。


Tags: 文件csv字符串texturlgetrequestslist
1条回答
网友
1楼 · 发布于 2024-06-01 13:34:42

^{}的文档中,到csv.readercsv.DictReader的第一个参数是csvfile-

csvfile can be any object which supports the iterator protocol and returns a string each time its next() method is called — file objects and list objects are both suitable

在您的例子中,当您将字符串作为csv.DictReader()的直接输入时,对它的next()调用只提供一个字符,因此它成为头,然后连续调用next()来获取每一行。

因此,您需要提供字符串的内存流(使用StringIO)或行列表(使用splitlines

您可以使用^{},然后在csv.DictReader中使用它。示例/演示-

>>> import csv
>>> s = """a,b,c
... 1,2,3
... 4,5,6
... 7,8,9"""
>>> import io
>>> reader_list = csv.DictReader(io.StringIO(s))
>>> print reader_list.fieldnames
['a', 'b', 'c']
>>> for row in reader_list:
...     print row
... 
{'a': '1', 'c': '3', 'b': '2'}
{'a': '4', 'c': '6', 'b': '5'}
{'a': '7', 'c': '9', 'b': '8'}

或者如注释中所示,您可以在作为输入给csv.DictReader之前拆分行。示例/演示-

>>> reader_list = csv.DictReader(s.splitlines())
>>> print reader_list.fieldnames
['a', 'b', 'c']
>>> for row in reader_list:
...     print row
... 
{'a': '1', 'c': '3', 'b': '2'}
{'a': '4', 'c': '6', 'b': '5'}
{'a': '7', 'c': '9', 'b': '8'}

相关问题 更多 >