查看全课大纲(第 44 / 51 节)
  1. 1.为什么人人都该学点编程?
  2. 2.计算机与程序设计:你的电脑到底在“想”什么?
  3. 3.Python 这门语言,到底有什么魔力?
  4. 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
  5. 5.如何安装一个更强大的代码编辑器?
  6. 6.汇率兑换1.0:你的第一个“钱生钱”小程序
  7. 7.你的第一行代码,藏着哪些秘密?
  8. 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
  9. 9.汇率兑换程序,如何让它“聪明”地判断币种?
  10. 10.汇率兑换程序能一直运行,直到我喊停吗?
  11. 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
  12. 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
  13. 13.怎么用 Python 画一个会动的五角星?
  14. 14.如何让程序自动画出不同大小的五角星?
  15. 15.函数自己调用自己,会发生什么?
  16. 16.用递归画出神奇的分形树
  17. 17.Python 怎么计算你一天躺着不动能消耗多少热量?
  18. 18.如何让程序“活”起来,持续为你服务?
  19. 19.如何让 BMR 计算器更“聪明”?
  20. 20.当程序遇到“不按套路出牌”的用户怎么办?
  21. 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
  22. 22.如何用列表记录每一周的存款?
  23. 23.如何让程序自己数数?—— 用 for 循环解放你的双手
  24. 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
  25. 25.52周存钱挑战:怎么根据日期自动查存款?
  26. 26.Python 怎么判断一年中的第几天?
  27. 27.列表 vs 元组:哪个更适合存储月份天数?
  28. 28.用集合给月份分个队,换个思路算天数
  29. 29.把月份和天数“锁”在一起:用字典给数据配个对
  30. 30.Python 怎么判断密码强弱?
  31. 31.Python 怎么给密码设置“防沉迷”系统?
  32. 32.Python 怎么把密码保存到文件里?
  33. 33.Python 怎么读取文件里的密码?
  34. 34.Python 怎么把密码检查工具“打包”起来?
  35. 35.Python 怎么把文件操作也“打包”起来?
  36. 36.计算机怎么“扔骰子”?——用Python模拟随机事件
  37. 37.如何用 Python 模拟掷两个骰子?
  38. 38.怎么用 Python 把骰子轨迹画出来?
  39. 39.骰子点数分布长啥样?用直方图一眼看穿!
  40. 40.用科学计算库让骰子程序“起飞”
  41. 41.空气质量指数怎么算?手把手教你写一个AQI计算器
  42. 42.空气质量指数计算:从零开始,让程序看懂空气
  43. 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
  44. 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
  45. 45.Python 怎么让程序自己判断文件类型?
  46. 46.如何让程序自己上网查空气质量?
  47. 47.用美味的汤来解析网页:Beautiful Soup 入门
  48. 48.如何让爬虫自动抓取全国所有城市的空气质量?
  49. 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
  50. 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
  51. 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 的规则很简单:

  1. 以行为单位:文件里的每一行,就是一条完整的数据记录。
  2. 逗号分隔:每一行里的不同数据项(比如城市名、AQI值),用英文逗号隔开。
  3. 第一行是“表头”:通常第一行不放具体数据,而是放每一列的名字,比如 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 打开后,你还可以轻松地进行筛选、制作图表,数据分析一下子变得直观多了。

📝 动手练一练

  1. 文件名的“花活”:我们生成的 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 的地方。

  1. 顺序反转:现在的 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 文件,然后自动进行对应的处理。敬请期待!

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第9章代码包:空气质量指数计算(含全部版本 10 个 .py)
    ZIP · 64KB
    下载
  • 数据集:aqi.csv(各城市 AQI 长表)
    772B
    下载
  • 数据集:beijing_aqi.json(北京监测点)
    3KB
    下载
  • 数据集:bottom10_aqi.csv(空气质量最差 10 城)
    412B
    下载
  • 数据集:china_city_aqi.csv(全国城市 AQI)
    13KB
    下载
  • 数据集:shanghai_aqi.json(上海监测点)
    3KB
    下载
  • 数据集:top10_aqi.csv(空气质量最好 10 城)
    372B
    下载
  • 数据集:top5_aqi.json(空气质量最好 5 城)
    1007B
    下载
看图文没弄懂?展开看本节视频讲解(约 9 分钟)
📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)