在Python中将API结果写入CSV

时间:2016-08-09 16:06:36

标签: python python-2.7 python-3.x csv export-to-csv

我正在寻找一些帮助,使用Python将API结果写入.CSV文件。此时,我已成功写入.CSV,但我似乎无法确定我正在寻找的.CSV格式背后的代码,这是标准的一个字段=一种列格式。

任何帮助表示赞赏!详情如下。谢谢!

我的代码:

import requests
import json
import csv

urlcomp = 'http://url_ommitted/api/reports/completion?status=COMPLETED&from=2016-06-01&to=2016-08-06'
headers = {'authorization': "Basic API Key Ommitted", 'accept': "application/json", 'accept': "text/csv"}

## API Call to retrieve report
rcomp = requests.get(urlcomp, headers=headers)

## API Results
data = rcomp.text

## Write API Results to CSV
with open('C:\_Python\\testCompletionReport.csv', "wb") as csvFile:
    writer = csv.writer(csvFile, delimiter=',')
    for line in data:
        writer.writerow(line)

上面的代码创建了一个具有正确输出的.CSV,但是它将API结果中的每个字符写入输出文件的A列中的新单元格。 以下屏幕截图:

Screenshot below:

我还尝试了下面的代码,它将整个API结果集写入.CSV输出文件中的单个单元格。

代码:

data = rcomp.text

with open('C:\_Python\\CompletionReportOutput.csv', 'wb') as csvFile:
    writer = csv.writer(csvFile, delimiter = ',')
    writer.writerow([data])

输出:

enter image description here

以下是我通话时返回的一些示例API结果数据的屏幕截图: enter image description here

我在最终.CSV输出文件中寻找的示例: enter image description here

编辑 - 示例API响应:

"包装已创建","包装ID","包装名称","包装状态","打包包装&# 34;,"包装已更新"," SENDER ID"," SENDER NAME"," SENDER COMPANY"," SENDER CREATED&# 34;," SENDER EMAIL",#34; SENDER FIRSTNAME",#34; SENDER LANGUAGE"," SENDER LASTNAME"," SENDER PHONE&# 34;," SENDER TITLE"," SENDER UPDATED"," SENDER ACTIVATED"," SENDER LOCKED"," SENDER STATUS&# 34;," SENDER TYPE" " Thu Aug 04 14:52:57 CDT 2016"," ulw5MTQo8WjBfoCTKqz9LNCFpV4 ="," TestOne to TestTwo - Flatten PDF Removed"," COMPLETED&# 34;," false"," Thu Aug 04 14:53:30 CDT 2016"," tKpohv2kZ2oU","",&# 34;"," 2016-08-03 14:12:06.904"," testaccount@test.com"," John",&# 34; en"," Smith","",""," 2016-08-03 14:12:06.942118&# 34;,"空""空""请"" REGULAR" " Thu Aug 04 09:39:22 CDT 2016"," IJV3U_yjPlxS-TVQgMrNgVUUSss ="," TestOne to TestTwo - Email Test"," COMPLETED& #34;," false"," Thu Aug 04 10:11:29 CDT 2016"," tKpohv2kZ2oU","",& #34;"," 2016-08-03 14:12:06.904"," testaccount@test.com"," John",& #34; en"," Smith","",""," 2016-08-03 14:12:06.942118& #34;"空""空""请"" REGULAR"

第二次编辑 - 李的建议输出:

enter image description here

3 个答案:

答案 0 :(得分:1)

print("That's not a valid play.  Check your spelling!"

答案 1 :(得分:1)

所以,我最终偶然发现了一个解决方案。不确定这是否是处理此问题的“正确”方法,但下面的代码将API结果直接写入具有正确列格式的.CSV。

# Get JSON Data
rcomp = requests.get(urlcomp, headers=headers)

# Write to .CSV
f = open('C:\_Python\Two\\newfile.csv', "w")
f.write(rcomp.text)
f.close()

答案 2 :(得分:-1)

import requests
import base64
import json

base_url = "http://dummy.restapiexample.com/api/v1/employees";

def get_report(base_url):
    print("Getting report results...")
    header_gs = {'Accept': 'application/json'}
    r = requests.get(base_url)
    if r.ok:
        print("Report results received...")
        print("HTTP %i - %s" % (r.status_code, r.reason))
        return r.text
    else:
        print("HTTP %i - %s" % (r.status_code, r.reason))

def export_to_json(base_url):
    print("Exporting report results to JSON file...")
    r = get_report(base_url)
    text_file = open("report_results.json", "w", encoding="utf8")
    text_file.write(r)
    text_file.close()

def export_to_csv(base_url):
    print("Exporting report results to JSON file...")

    csv_file = open('report_results.csv', "w", encoding="utf8")
    csv_file.write("Id, Employee_Name"+"\n") #manually modify this CSV file header
    csv_file.close()

    #there are 3 attributes in my example; add/remove levels according to the number of attributes in your case
    r = get_report(base_url)
    report_parsed = json.loads(r)
    print(report_parsed)
    a1_list = report_parsed['data']
    print(a1_list)
    for a1 in a1_list:
        a1_id = a1['id']
        a2_employee_name=a1['employee_name']
        csv_file = open('report_results.csv', "a", encoding="utf8")
        csv_file.write("'"+a1_id + "','" + a2_employee_name +"\n")
        csv_file.close()


    print("Export finished")

def main():
    choice = None
    while choice != "0":
        print \
            ("""
        ---MENU---
        
        0 - Exit
        1 - Export report results to JSON file
        2 - Export report results to CSV file
        """)

        choice = input("Your choice: ") # What To Do ???
        print()

        if choice == "0":
            print("Good bye!")
        elif choice == "1":
            export_to_json(base_url)
        elif choice == "2":
            export_to_csv(base_url)
        else:
            print(" ### Wrong option ### ")

### Main program
main()