我正在使用URL直接从URL下载CSV文件requests.
如何解析生成的字符串csv.DictReader?
现在我有这个:
r = requests.get(url)
reader_list = csv.DictReader(r.text)
print reader_list.fieldnames
for row in reader_list:
print row
Run Code Online (Sandbox Code Playgroud)
但我只是得到['r']了结果fieldnames,然后是各种奇怪的东西print row.
Ana*_*mar 39
从文档csv中,第一个参数csv.reader或者csv.DictReader是csvfile-
csvfile可以是任何支持迭代器协议的对象,每次调用next()方法时都返回一个字符串 - 文件对象和列表对象都适用
在你将字符串作为直接输入的情况下csv.DictReader(),next()对它的调用只提供一个字符,因此它成为标题,然后连续调用next()来获取每一行.
因此,您需要提供字符串的内存中流(使用StringIO)或行列表(使用splitlines)
您可以使用io.StringIO()然后使用它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'}
Run Code Online (Sandbox Code Playgroud)
或者如评论中所示,您可以在作为输入提供之前拆分行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'}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13475 次 |
| 最近记录: |