查看全课大纲(第 44 / 51 节)
- 1.为什么人人都该学点编程?
- 2.计算机与程序设计:你的电脑到底在“想”什么?
- 3.Python 这门语言,到底有什么魔力?
- 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
- 5.如何安装一个更强大的代码编辑器?
- 6.汇率兑换1.0:你的第一个“钱生钱”小程序
- 7.你的第一行代码,藏着哪些秘密?
- 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
- 9.汇率兑换程序,如何让它“聪明”地判断币种?
- 10.汇率兑换程序能一直运行,直到我喊停吗?
- 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
- 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
- 13.怎么用 Python 画一个会动的五角星?
- 14.如何让程序自动画出不同大小的五角星?
- 15.函数自己调用自己,会发生什么?
- 16.用递归画出神奇的分形树
- 17.Python 怎么计算你一天躺着不动能消耗多少热量?
- 18.如何让程序“活”起来,持续为你服务?
- 19.如何让 BMR 计算器更“聪明”?
- 20.当程序遇到“不按套路出牌”的用户怎么办?
- 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
- 22.如何用列表记录每一周的存款?
- 23.如何让程序自己数数?—— 用 for 循环解放你的双手
- 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
- 25.52周存钱挑战:怎么根据日期自动查存款?
- 26.Python 怎么判断一年中的第几天?
- 27.列表 vs 元组:哪个更适合存储月份天数?
- 28.用集合给月份分个队,换个思路算天数
- 29.把月份和天数“锁”在一起:用字典给数据配个对
- 30.Python 怎么判断密码强弱?
- 31.Python 怎么给密码设置“防沉迷”系统?
- 32.Python 怎么把密码保存到文件里?
- 33.Python 怎么读取文件里的密码?
- 34.Python 怎么把密码检查工具“打包”起来?
- 35.Python 怎么把文件操作也“打包”起来?
- 36.计算机怎么“扔骰子”?——用Python模拟随机事件
- 37.如何用 Python 模拟掷两个骰子?
- 38.怎么用 Python 把骰子轨迹画出来?
- 39.骰子点数分布长啥样?用直方图一眼看穿!
- 40.用科学计算库让骰子程序“起飞”
- 41.空气质量指数怎么算?手把手教你写一个AQI计算器
- 42.空气质量指数计算:从零开始,让程序看懂空气
- 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
- 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
- 45.Python 怎么让程序自己判断文件类型?
- 46.如何让程序自己上网查空气质量?
- 47.用美味的汤来解析网页:Beautiful Soup 入门
- 48.如何让爬虫自动抓取全国所有城市的空气质量?
- 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
- 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
- 51.空气质量数据怎么“洗”干净,还能画成图?
JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
约 9 分钟
小象实战讲义 · Python 入门:8 个小项目边玩边学
上一节,我们学会了用 JSON 文件来存储和读取空气质量数据,还给它排了个名次。但有时候,你的朋友或同事可能更习惯用 Excel 表格来看数据。别担心,数据可以“变身”!这一节,我们就来玩一个“数据变装秀”:把格式优美的 JSON 数据,一键转换成简单通用的 CSV 表格文件。转换完,你就可以直接用 Excel 打开,像看表格一样查看和分析数据了。
💡 核心导读
- 认识新朋友 CSV:一种用逗号分隔数据的通用文件格式,和 Excel 表格是“好兄弟”。
- 只做一件事:在上一节排序的基础上,新增将排序后的数据写入 CSV 文件的功能。
- 核心操作:使用 Python 内置的
csv库,一行一行地把数据“写”进文件。 - 成果预览:你将得到一个名为
aqi.csv的文件,用 Excel 双击就能打开,里面是所有城市按 AQI 排好序的数据。
数据界的“通用语”:CSV
JSON 格式虽然灵活,但在很多办公和数据分析场景里,大家更习惯用表格。这时候,CSV(Comma-Separated Values) 就登场了。你可以把它理解为数据界的“通用语”。
CSV 的规则很简单:
- 以行为单位:文件里的每一行,就是一条完整的数据记录。
- 逗号分隔:每一行里的不同数据项(比如城市名、AQI值),用英文逗号隔开。
- 第一行是“表头”:通常第一行不放具体数据,而是放每一列的名字,比如
AQI, Area, PM2.5。
听起来有点抽象?我们直接看一个 CSV 文件长什么样:
AQI,Area,PM2.5,PM10,CO,NO2,SO2
47,北京,32,46,0.5,28,3
102,顺义新城,76,102,0.9,41,5
...是不是很像你把数据填进 Excel 表格的样子?没错!CSV 文件可以直接用 Excel、Numbers 等电子表格软件打开和编辑,非常方便。
本节新增:把 JSON 数据“写”成 CSV 文件
我们的目标很明确:读取 beijing_aqi.json,把里面的数据排好序,然后生成一个 aqi.csv 文件。
整个程序的升级思路是:在上一版(v2.0)排序功能的后面,追加“写入CSV文件”的步骤。 其他部分保持不变。
下面就是完整的 v3.0 程序。为了让你能直接复制运行,我们把所有代码写在一个块里,并且用固定文件名代替了 input()。
# aqi_v3.0.py - JSON 转 CSV
import json
import csv # 本节新增:引入 csv 模块来操作 CSV 文件
import os
# 本节需要 beijing_aqi.json(课程 resources 附件提供);为便于单独运行,先用示例数据建一份
with open('beijing_aqi.json', 'w', encoding='utf-8') as f: # 示例数据:每次运行都重建,保证输出一致
f.write('[{"aqi": "51", "area": "北京"}, {"aqi": "102", "area": "顺义"}]')
# 本节需要 aqi.csv(课程 resources 附件提供);为便于单独运行,先用示例数据建一份
with open('aqi.csv', 'w', encoding='utf-8') as f: # 示例数据:每次运行都重建,保证输出一致
f.write('''AQI,Area,PM2.5,PM10,CO,NO2,SO2
44,昌平,31,44,0.5,26,3
46,海淀,33,46,0.5,28,3
47,北京,32,46,0.5,28,3
...
102,顺义新城,76,102,0.9,41,5''')
def process_json_file(filepath):
"""读取并解析 JSON 文件"""
f = open(filepath, mode='r', encoding='utf-8')
city_list = json.load(f)
f.close()
return city_list
# 主逻辑开始
# 原程序这里用 input() 让用户输入文件名,例如"beijing_aqi.json"
# 为了让你能直接运行,这里先用一个固定值代替
json_filename = 'beijing_aqi.json' # 你可以改成你有的 JSON 文件名
# 1. 读取 JSON 数据
city_list = process_json_file(json_filename)
# 2. 按 AQI 值从小到大排序(上一节的功能)
city_list.sort(key=lambda city: city['aqi'])
# 3. 准备要写入 CSV 的所有行数据(本节新增功能)
lines = [] # 这个列表将存储 CSV 的每一行
# 3.1 第一行是表头:取第一条数据的键(key)作为列名
header = list(city_list[0].keys())
lines.append(header)
# 3.2 后续每一行是具体的数据:取每条数据的值(value)
for city in city_list:
row_data = list(city.values())
lines.append(row_data)
# 4. 将 lines 中的数据写入 CSV 文件(本节新增功能)
csv_filename = 'aqi.csv'
# 打开文件准备写入,指定编码,并且 newline='' 防止写入多余空行
f = open(csv_filename, 'w', encoding='utf-8', newline='')
writer = csv.writer(f) # 创建一个 csv 写入器
# 写入器有一个超级好用的方法:writerow(),可以一次写入一行(一个列表)
for line in lines:
writer.writerow(line)
f.close() # 写完记得关门!
print(f'数据已成功转换并保存到 {csv_filename} !')
print('现在你可以用 Excel 或文本编辑器打开它查看。')运行一下,看看效果! 当你运行上面的程序(假设你有一个 beijing_aqi.json 文件),它不会在屏幕上打印大量数据,而是默默地在当前文件夹里生成了一个新文件:aqi.csv。
这就是我们本节新增的全部功能! 程序的核心就是最后那几行:创建 csv.writer 对象,然后循环调用 writerow() 方法,把准备好的每一行数据写进去。
看看我们的“劳动成果”
生成 aqi.csv 后,你可以直接用 Excel 打开它。如果没装 Excel,用电脑自带的记事本或任何文本编辑器也能看。文件内容大致如下(已排序):
AQI,Area,PM2.5,PM10,CO,NO2,SO2
44,昌平,31,44,0.5,26,3
46,海淀,33,46,0.5,28,3
47,北京,32,46,0.5,28,3
...
102,顺义新城,76,102,0.9,41,5看!第一行是清晰的表头,下面每一行都是一条城市数据,AQI 值从低到高排列。用 Excel 打开后,你还可以轻松地进行筛选、制作图表,数据分析一下子变得直观多了。
📝 动手练一练
- 文件名的“花活”:我们生成的 CSV 文件固定叫
aqi.csv。如果想根据输入的 JSON 文件名来动态生成 CSV 文件名呢?例如,输入beijing_aqi.json就生成beijing_aqi.csv。你会怎么修改程序?
👉 点击查看参考答案
思路:我们需要从输入的 json_filename(例如 'beijing_aqi.json')中提取出主文件名('beijing_aqi'),然后加上 .csv 后缀。
关键代码片段(替换原来写死 csv_filename = 'aqi.csv' 的那一行):
import os
# 从输入文件名里去掉扩展名,再拼上 .csv
base_name = os.path.splitext(json_filename)[0] # 'beijing_aqi.json' → 'beijing_aqi'
csv_filename = base_name + '.csv' # → 'beijing_aqi.csv'你可以把这段逻辑加到主程序中定义 csv_filename 的地方。
- 顺序反转:现在的 CSV 文件是按 AQI 从低到高(空气质量从好到差)排序的。如果你的朋友想先看污染最严重的城市,该如何修改程序,让 CSV 文件按 AQI 从高到低排序?
👉 点击查看参考答案
思路:list.sort() 方法有一个参数 reverse,将其设置为 True 即可实现降序排序。
关键代码片段(只改排序这一行):
# 将原来的排序行改为:
city_list.sort(key=lambda city: city['aqi'], reverse=True)
# reverse=True 表示降序,AQI 最大的排在最前面只需修改这一行,后面写入 CSV 的逻辑完全不变。
本章小结
恭喜!你的“空气质量分析工具包”又升级了。现在它不仅能读懂 JSON 格式的“专业报告”,还能输出 CSV 格式的“通用表格”,实用性大增。
📋 行动清单
学完本节,你可以立刻:
- 运行一遍上面的完整代码,在你的文件夹里找到生成的
aqi.csv文件。 - 用 Excel 或记事本打开这个 CSV 文件,感受一下不同格式的数据呈现。
- 尝试修改练一练中的第2题,生成一个按污染程度从重到轻排列的表格,看看结果有什么不同。
数据的价值在于流动和共享。让数据在不同格式间轻松转换,是你成为“数据小能手”的第一步。下一节,我们将更智能:让程序自己判断你给的是 JSON 文件还是 CSV 文件,然后自动进行对应的处理。敬请期待!
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。