2015-11-03 2 views
3

Я включил Bulf API Salesforce для получения записей в моем проекте Python. С заголовком 'Content-Type': 'text/csv; charset=UTF-8' он возвращает CSV-выход.Как использовать Python CSV DictReader для анализа вывода 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]) 

Что будет самым элегантным способом сделать это?

ответ

3

вы можете обернуть строку 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'] 
+0

Это замечательно. Но я получаю исключение 'TypeError: initial_value должен быть unicode или None, а не str' в' data = io.StringIO (csv_output) ' – Hussain

+0

oh, вы находитесь на python 2.7, правильно? или какая у вас версия python? –

+0

Да, я на 2.7 – Hussain

Смежные вопросы