草庐IT

Python csv.DictReader : parse string?

coder 2023-05-24 原文

我正在使用 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 得到各种奇怪的东西。

最佳答案

来自 csv 的文档,csv.reader 的第一个参数或 csv.DictReadercsvfile -

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__() 以获取每一行。

因此,您需要使用 io.StringIO 提供内存中的字符串流:

>>> 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', 'b': '2', 'c': '3'}
{'a': '4', 'b': '5', 'c': '6'}
{'a': '7', 'b': '8', 'c': '9'}

或使用 str.splitlines 的行列表:

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

关于Python csv.DictReader : parse string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658115/

有关Python csv.DictReader : parse string?的更多相关文章

  1. javascript - 使用 parseString() 时, Node xml2js 返回 'undefined' - 2

    我在别处使用这个包并且它工作得很好,但是在一个XML文件的特定示例中,我收到“未定义”错误。例子:fs.readFile('./XML/theXMLfile13mb.xml','ascii',function(err,data){if(err){console.log("Couldnotopenfile"+err);process.exit(1);}parseString(data,function(err,result){console.log(result);//Returnsundefinedvarjson1=JSON.stringify(result);//Givesanerr

  2. python - 在 python 中使用 csv.DictReader 进行数据类型转换的最快方法 - 2

    我正在用python处理一个CSV文件,使用时该文件大约有100,000行。每行都有一组维度(作为字符串)和一个指标(float)。由于csv.DictReader或csv.reader仅将值作为字符串返回,我目前正在遍历所有行并将一个数值转换为float。foriincsvDict:i[col]=float(i[col])有没有任何人可以建议这样做的更好方法?我一直在研究map、izip、itertools的各种组合,并广泛搜索了一些更高效的示例,但遗憾的是没有取得太大成功。如果有帮助:我在appengine上做这个。我相信我正在做的事情可能会导致我遇到这个错误:在为总共11个请求提

  3. python - 将 csv.DictReader 对象转换为字典列表? - 2

    一个csv文件names.csv有内容:first_namelast_nameBakedBeansLovelySpamWonderfulSpam我想将它读入字典列表,第一行包含键:>>>importcsv>>>withopen('names.csv')ascsvfile:...reader=csv.DictReader(csvfile)...forrowinreader:...print(row['first_name'],row['last_name'])...BakedBeansLovelySpamWonderfulSpam但是reader是csv.DictReader的类型吗?如

  4. python - 将 csv.DictReader 对象转换为字典列表? - 2

    一个csv文件names.csv有内容:first_namelast_nameBakedBeansLovelySpamWonderfulSpam我想将它读入字典列表,第一行包含键:>>>importcsv>>>withopen('names.csv')ascsvfile:...reader=csv.DictReader(csvfile)...forrowinreader:...print(row['first_name'],row['last_name'])...BakedBeansLovelySpamWonderfulSpam但是reader是csv.DictReader的类型吗?如

  5. Python csv.DictReader : parse string? - 2

    我正在使用requests直接从URL下载CSV文件。如何使用csv.DictReader解析结果字符串?现在我有这个:r=requests.get(url)reader_list=csv.DictReader(r.text)printreader_list.fieldnamesforrowinreader_list:printrow但我只是得到['r']作为fieldnames的结果,然后从printrow得到各种奇怪的东西。 最佳答案 来自csv的文档,csv.reader的第一个参数或csv.DictReader是csvfil

  6. Python csv.DictReader : parse string? - 2

    我正在使用requests直接从URL下载CSV文件。如何使用csv.DictReader解析结果字符串?现在我有这个:r=requests.get(url)reader_list=csv.DictReader(r.text)printreader_list.fieldnamesforrowinreader_list:printrow但我只是得到['r']作为fieldnames的结果,然后从printrow得到各种奇怪的东西。 最佳答案 来自csv的文档,csv.reader的第一个参数或csv.DictReader是csvfil

  7. python - 是否可以使用 csv.DictReader 保持列顺序? - 2

    例如,我的csv有如下列:ID,ID2,Date,JobNo,Code我需要以相同的顺序写回这些列。dict立即混淆了顺序,所以我相信这更多的是读者的问题。 最佳答案 Python的dict在3.6之前不保持顺序(但无论如何,在那个版本中,csv.DictReader类被修改为返回OrderedDicts)。但是,您正在使用的csv.DictReader实例(在您阅读了第一行之后!-)确实有一个.fieldnames字符串列表,按顺序IS。所以,forrowdictinmyReader:print['%s:%s'%(f,rowdic

  8. python - 是否可以使用 csv.DictReader 保持列顺序? - 2

    例如,我的csv有如下列:ID,ID2,Date,JobNo,Code我需要以相同的顺序写回这些列。dict立即混淆了顺序,所以我相信这更多的是读者的问题。 最佳答案 Python的dict在3.6之前不保持顺序(但无论如何,在那个版本中,csv.DictReader类被修改为返回OrderedDicts)。但是,您正在使用的csv.DictReader实例(在您阅读了第一行之后!-)确实有一个.fieldnames字符串列表,按顺序IS。所以,forrowdictinmyReader:print['%s:%s'%(f,rowdic

随机推荐