【问题标题】:How to use Python's CSV DictReader to parse a CSV output?如何使用 Python 的 CSV DictReader 解析 CSV 输出?
【发布时间】:2015-11-03 11:12:12
【问题描述】:

我已经集成了 Salesforce 的 Bulk API,用于在我的 Python 项目中获取记录。使用 'Content-Type': 'text/csv; charset=UTF-8' 标头,它返回 CSV 输出。

"Id","Name","CreatedById","Salary","Base_Salary","Type","Pay_cycle","Description","Code"
"a0u90000003R4Y9AAK","Freelance Hadoop developer","005900000039GMdAAM","","","","","",""
"a0u90000003R5UPAA0","Senior Hadoop developer","005900000039GMdAAM","","","","","",""
"a0u90000003R5V3AAK","Freelance Webmaster","005900000039GMdAAM","","","","","",""
"a0u90000004ZMUwAAO","Full-Stack Web Developer - PHP and Python","005900000039GMdAAM","","","","","",""

现在,不将其存储在 CSV 文件中,我想将这些记录放在我的 Db 中。

DictReader 是一个非常好的和直接的获取字段值的解决方案,但我猜它只适用于 (CSV) 文件。

import csv
with open('output.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['Id'], row['Name'])

我正在尝试一些东西,但我不喜欢它。见

objects = []
for line in iter(csv_data.splitlines()):
    # Split by separator
    data = line.split(",")
    # Remove double quotes around the field value
    objects.append([i[1:-1] for i in data])

这样做最优雅的方式是什么?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您可以将 csv 字符串包装到 io.StringIO 对象中。这将与csv 模块完美配合:

    data_str = '''"Id","Name","CreatedById","Salary","Base_Salary","Type","Pay_cycle","Description","Code"
    "a0u90000003R4Y9AAK","Freelance Hadoop developer","005900000039GMdAAM","","","","","",""
    "a0u90000003R5UPAA0","Senior Hadoop developer","005900000039GMdAAM","","","","","",""
    "a0u90000003R5V3AAK","Freelance Webmaster","005900000039GMdAAM","","","","","",""
    "a0u90000004ZMUwAAO","Full-Stack Web Developer - PHP and Python","005900000039GMdAAM","","","","","",""'''
    
    # in python 2 you need to decode the string before passing it to StringIO
    data_io = io.StringIO(data_str.decode('utf-8'))
    ## this is not needed in python 3
    # data_io = io.StringIO(data_str)
    
    reader = csv.DictReader(data_io)
    for row in reader:
        print row['Id'], row['Name']
    

    【讨论】:

    • 这很棒。但是我在data = io.StringIO(csv_output) 中遇到了一个异常TypeError: initial_value must be unicode or None, not str
    • 哦,你在 python 2.7 上,对吧?或者你的python版本是什么?
    • 那么你需要解码附加.decode('utf-8')的字符串,然后再将它传递给io.StringIO
    • 是的。我在这里也看到了stackoverflow.com/questions/22316333/…
    • 现在完美运行!谢谢!赞成并接受您的回答。你应该把.decode('utf-8')的东西放在你的里面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2023-03-26
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2011-12-14
    相关资源
    最近更新 更多