如何将Python3筛选后的航班列表转为以对象键为列名的CSV文件
如何将Python字典列表转换为以键为列名的CSV文件?
我编写了如下Python代码:
import requests, json r = requests.get('http://someurl.com/api') data = r.json() flights = [] for flight in data: # print(flight['identifier']) if flight['STDudt'].strip() < flight['ETDudt'].strip() and flight['OUTudt'].strip() == '': flights.append(flight) print(flights)
目前代码输出的flights列表格式如下:
[{'numGMTDate': '20180515', 'STDudt': '1405', 'STAudt': '1545', 'ETDudt': '1415', 'OUTudt': '', 'OFFudt': ''},{'numGMTDate': '20180515', 'STDudt': '1530', 'STAudt': '1831', 'ETDudt': '1540', 'OUTudt': '', 'OFFudt': ''}]
请问如何将该列表转换为以对象的键作为列名的CSV文件?
两种实用方法帮你搞定需求
方法1:用Python内置csv模块(无额外依赖)
如果不想引入第三方库,标准库的csv模块完全能胜任。核心逻辑是先把字典的键提取出来当表头,再逐行写入数据:
import csv # 假设你的flights列表已经生成完成 flights = [{'numGMTDate': '20180515', 'STDudt': '1405', 'STAudt': '1545', 'ETDudt': '1415', 'OUTudt': '', 'OFFudt': ''},{'numGMTDate': '20180515', 'STDudt': '1530', 'STAudt': '1831', 'ETDudt': '1540', 'OUTudt': '', 'OFFudt': ''}] # 先检查列表是否为空,避免报错 if flights: # 取第一个字典的键作为CSV表头 fieldnames = flights[0].keys() # 打开文件准备写入,newline=''避免生成空行 with open('flights.csv', 'w', newline='', encoding='utf-8') as csvfile: # 创建DictWriter对象,指定表头 writer = csv.DictWriter(csvfile, fieldnames=fieldnames) # 写入表头行 writer.writeheader() # 逐个写入字典数据 for flight in flights: writer.writerow(flight)
运行后就能得到以字典键为列名的CSV文件啦。
方法2:用pandas库(简洁高效,适合大数据)
如果日常会处理数据,用pandas会更省心,几行代码就能搞定:
先安装pandas(没装过的话):
pip install pandas
然后编写转换代码:
import pandas as pd # 假设你的flights列表已生成 flights = [{'numGMTDate': '20180515', 'STDudt': '1405', 'STAudt': '1545', 'ETDudt': '1415', 'OUTudt': '', 'OFFudt': ''},{'numGMTDate': '20180515', 'STDudt': '1530', 'STAudt': '1831', 'ETDudt': '1540', 'OUTudt': '', 'OFFudt': ''}] # 转成DataFrame后直接保存为CSV,index=False去掉默认索引列 df = pd.DataFrame(flights) df.to_csv('flights_pandas.csv', index=False, encoding='utf-8')
两种方法都能满足需求,根据你的场景选就行~
内容的提问来源于stack exchange,提问作者jeesan485
相关产品推荐
相关产品推荐

