我正在寻找一些帮助,使用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列中的新单元格。 以下屏幕截图:
我还尝试了下面的代码,它将整个API结果集写入.CSV输出文件中的单个单元格。
代码:
data = rcomp.text
with open('C:\_Python\\CompletionReportOutput.csv', 'wb') as csvFile:
writer = csv.writer(csvFile, delimiter = ',')
writer.writerow([data])
输出:
编辑 - 示例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"
第二次编辑 - 李的建议输出:
答案 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()