2024-06-01 13:34:42 发布
网友
我正在使用requests从URL直接下载CSV文件。
requests
如何使用csv.DictReader解析结果字符串?
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得到各种奇怪的东西。
['r']
fieldnames
print row
从^{}的文档中,到csv.reader或csv.DictReader的第一个参数是csvfile-
csv.reader
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()来获取每一行。
csv.DictReader()
next()
因此,您需要提供字符串的内存流(使用StringIO)或行列表(使用splitlines)
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'}
从^{} 的文档中,到
csv.reader
或csv.DictReader
的第一个参数是csvfile
-在您的例子中,当您将字符串作为
csv.DictReader()
的直接输入时,对它的next()
调用只提供一个字符,因此它成为头,然后连续调用next()来获取每一行。因此,您需要提供字符串的内存流(使用StringIO)或行列表(使用
splitlines
)您可以使用^{} ,然后在
csv.DictReader
中使用它。示例/演示-或者如注释中所示,您可以在作为输入给
csv.DictReader
之前拆分行。示例/演示-相关问题 更多 >
编程相关推荐