当前位置: 首页 > news >正文

Python 数据处理封神篇:CSV+JSON 全解析,从入门到天气 API 实战

前言

做数据分析、爬虫、办公自动化,绕不开两大数据格式:CSV(表格数据)JSON(接口数据)。CSV 是 Excel 的 “亲兄弟”,用来存表格、报表、名单;JSON 是互联网的 “通用语言”,API 接口、配置文件全靠它。

这篇不讲废话、不搞应试,全是能直接用的实战代码 + 逐行讲解,从基础读写到项目实战,看完就能自己写数据处理工具,效率直接拉满!


一、先搞懂:CSV 和 JSON 到底是什么?

最简单的 CSV 样例

新建一个文本文档,把下面内容粘贴进去,保存为data.csv就能用:

姓名,年龄,性别,城市,成绩 张三,18,男,北京,92 李四,19,女,上海,88 王五,18,男,广州,95 赵六,19,女,深圳,90

这就是标准 CSV:

  • 第一行是表头
  • 每一行是一条数据
  • 逗号,分隔

带空值、带英文的 CSV 样例

id,name,age,city,score 1,Alice,20,Beijing,85 2,Bob,,Shanghai,91 3,Charlie,21,Guangzhou, 4,Diana,19,Shenzhen,89
  • 空的地方直接留空
  • 支持英文、数字、中文混合

简单 JSON 样例(单个人信息)

{ "name": "张三", "age": 18, "city": "北京", "score": 92, "is_student": true, "hobbies": ["篮球", "编程", "读书"] }

真实接口风格 JSON(多人列表)

{ "code": 200, "message": "success", "data": [ { "id": 1, "name": "张三", "age": 18, "city": "北京", "score": 92 }, { "id": 2, "name": "李四", "age": 19, "city": "上海", "score": 88 }, { "id": 3, "name": "王五", "age": 18, "city": "广州", "score": 95 } ] }
格式核心特点适用场景
CSV纯文本、逗号分隔、表格结构Excel 表格、数据报表、名单、批量数据
JSON键值对、层级结构、轻量API 接口、配置文件、爬虫数据、结构化数据

一句话总结:CSV 管表格,JSON 管接口,Python 自带标准库就能处理,不用额外装复杂工具!


二、CSV 模块:表格数据全自动处理(逐行精讲)

Python 自带csv模块,专门处理 CSV 文件,不用装第三方库,开箱即用!

1. 基础读写:reader/writer 对象

1.1 用 reader 读取 CSV

import csv # 打开CSV文件,newline=''避免空行 with open('data.csv', 'r', newline='', encoding='utf-8') as f: # 创建reader对象,按行读取 reader = csv.reader(f) # 遍历每一行,reader是可迭代对象 for row in reader: # row是列表,每个元素对应一列 print(row)

代码讲解

  • csv.reader(f):把文件对象转成 reader,按行读取,每行是一个列表
  • newline='':Windows 系统必加,否则会出现多余空行
  • encoding='utf-8':解决中文乱码问题

1.2 用 writer 写入 CSV

import csv # 要写入的数据(列表嵌套列表,对应表格行) data = [ ['姓名', '年龄', '成绩'], ['张三', '18', '95'], ['李四', '18', '92'], ['王五', '18', '98'] ] with open('output.csv', 'w', newline='', encoding='utf-8') as f: # 创建writer对象 writer = csv.writer(f) # 写入多行(一次性写入) writer.writerows(data) # 也可以逐行写入:writer.writerow(['赵六', '18', '90'])

代码讲解

  • csv.writer(f):创建写入器,负责把数据写入文件
  • writerows():一次性写入多行,writerow()逐行写入
  • 数据格式必须是列表嵌套列表,外层列表对应行,内层列表对应列

1.3 自定义分隔符和换行符

CSV 默认用逗号分隔,我们可以自定义分隔符(比如制表符\t、分号;):

import csv # 用分号分隔,换行符用\r\n(兼容Windows) with open('custom.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f, delimiter=';', lineterminator='\r\n') writer.writerow(['a', 'b', 'c']) writer.writerow(['1', '2', '3'])

核心参数

  • delimiter:列分隔符,默认,
  • lineterminator:行结束符,默认\r\n
  • 适合处理非标准 CSV 文件,比如用分号分隔的欧洲格式 CSV

1.4 高阶读写:DictReader/DictWriter(最常用!)

用字典读写 CSV,直接对应表头,不用记列索引,可读性拉满!

用 DictReader 读取(按表头取数据)
import csv with open('data.csv', 'r', newline='', encoding='utf-8') as f: # 第一行自动作为表头,每行是字典,键是表头,值是对应数据 reader = csv.DictReader(f) # 遍历每一行 for row in reader: # 直接用表头取数据,不用记索引! print(f"姓名:{row['姓名']},年龄:{row['年龄']},成绩:{row['成绩']}")
用 DictWriter 写入(按表头写数据)
import csv # 表头(必须和字典键一致) headers = ['姓名', '年龄', '成绩'] # 数据(列表嵌套字典) data = [ {'姓名': '张三', '年龄': '18', '成绩': '95'}, {'姓名': '李四', '年龄': '18', '成绩': '92'}, {'姓名': '王五', '年龄': '18', '成绩': '98'} ] with open('dict_output.csv', 'w', newline='', encoding='utf-8') as f: # 创建DictWriter,指定表头 writer = csv.DictWriter(f, fieldnames=headers) # 先写入表头(必须!) writer.writeheader() # 写入多行数据 writer.writerows(data)

代码讲解

  • DictReader:自动把第一行作为表头,每行是字典,直接用表头取值,再也不用记row[0]row[1]
  • DictWriter:必须指定fieldnames(表头),先写表头再写数据,格式工整
  • 适合处理有表头的 CSV,是办公自动化、数据分析的首选!

三、实战项目 1:批量删除 CSV 标题行

需求:批量处理多个 CSV,删除第一行标题行,生成新文件!

完整代码 + 逐行讲解

import csv import os # 1. 循环遍历文件夹中所有CSV文件 csv_folder = 'csv_files' # 存放CSV的文件夹 output_folder = 'no_header_csv' # 输出文件夹 os.makedirs(output_folder, exist_ok=True) # 不存在则创建 for filename in os.listdir(csv_folder): if filename.endswith('.csv'): input_path = os.path.join(csv_folder, filename) output_path = os.path.join(output_folder, filename) # 2. 读入CSV文件 with open(input_path, 'r', newline='', encoding='utf-8') as f_in: reader = csv.reader(f_in) # 跳过第一行(标题行),从第二行开始读 rows = list(reader)[1:] # 转成列表,切片去掉第一行 # 3. 写入CSV文件,无标题行 with open(output_path, 'w', newline='', encoding='utf-8') as f_out: writer = csv.writer(f_out) writer.writerows(rows) print(f"已处理:{filename}") print("所有CSV标题行删除完成!")

步骤拆解(对应目录)

  1. 遍历 CSV 文件:用os.listdir扫描文件夹,筛选.csv文件
  2. 读入 CSV:用csv.reader读取,转成列表后切片[1:],去掉第一行标题
  3. 写入新 CSV:用csv.writer写入处理后的数据,无标题行
  4. 扩展思路
    • 可以加筛选条件,只删除特定表头的 CSV
    • 可以批量修改列名、删除指定列
    • 可以合并多个 CSV 到一个文件

四、JSON 模块:接口数据一键处理(逐行精讲)

JSON 是互联网的通用数据格式,API 接口、爬虫数据全靠它,Python 自带json模块,完美适配!

1. JSON 核心:loads ()/dumps () 读写

1.1 用 loads () 读取 JSON(字符串→Python 对象)

import json # JSON格式的字符串(API返回的原始数据就是这种) json_str = '{"name": "张三", "age": 18, "score": 95, "hobbies": ["篮球", "编程"]}' # 把JSON字符串转成Python字典 data = json.loads(json_str) print(data) print(type(data)) # <class 'dict'> # 直接取值,和操作字典一样 print(f"姓名:{data['name']},爱好:{data['hobbies'][0]}")

1.2 用 dumps () 写入 JSON(Python 对象→JSON 字符串)

import json # Python字典(要转成JSON的数据) data = { "name": "张三", "age": 18, "score": 95, "hobbies": ["篮球", "编程"] } # 把Python字典转成JSON字符串,indent=4自动格式化,ensure_ascii=False解决中文乱码 json_str = json.dumps(data, indent=4, ensure_ascii=False) print(json_str) # 写入JSON文件 with open('data.json', 'w', encoding='utf-8') as f: json.dump(data, f, indent=4, ensure_ascii=False)

核心参数 & 区别

函数作用适用场景
json.loads()字符串→Python 对象处理 API 返回的 JSON 字符串
json.dumps()Python 对象→字符串生成 JSON 字符串、格式化输出
json.load()文件→Python 对象读取 JSON 文件
json.dump()Python 对象→文件写入 JSON 文件
  • indent=4:自动缩进,格式化 JSON,可读性拉满
  • ensure_ascii=False:解决中文乱码,必须加!

五、实战项目 2:获取当前天气数据(API+JSON 实战)

这是最经典的 JSON 实战项目:调用天气 API,获取当前城市天气,用 Python 自动输出!

完整代码 + 逐行讲解

import json import requests import sys # 1. 从命令行参数获取位置(比如:python weather.py 北京) if len(sys.argv) < 2: print("用法:python weather.py 城市名") sys.exit() city = sys.argv[1] # 2. 调用天气API(这里用免费的和风天气API,需要自己申请Key) # 申请地址:https://dev.qweather.com/ api_key = "你的API密钥" # 替换成自己的Key url = f"https://devapi.qweather.com/v7/weather/now?location={city}&key={api_key}" # 发送请求,获取JSON数据 response = requests.get(url) # 把响应的JSON字符串转成Python字典 weather_data = json.loads(response.text) # 3. 加载JSON数据,提取并输出天气 if weather_data['code'] == '200': now = weather_data['now'] print(f"城市:{city}") print(f"当前温度:{now['temp']}℃") print(f"天气状况:{now['text']}") print(f"风向:{now['windDir']},风速:{now['windSpeed']}km/h") print(f"湿度:{now['humidity']}%") else: print(f"获取天气失败:{weather_data['message']}") # 4. 扩展思路 # - 可以加定时任务,每天定时获取天气 # - 可以把天气写入CSV/Excel,生成天气报表 # - 可以加预警功能,恶劣天气自动提醒

步骤拆解(对应目录)

  1. 获取位置:用sys.argv从命令行获取城市名,灵活输入
  2. 下载 JSON 数据:用requests调用 API,获取 JSON 格式的天气数据
  3. 解析 JSON:用json.loads()转成字典,提取需要的天气信息
  4. 输出结果:格式化输出天气,直观清晰

六、全文总结(看完就能用)

CSV 核心知识点

  • 基础读写:reader/writer,适合无表头 CSV
  • 高阶读写:DictReader/DictWriter,适合有表头 CSV,最常用
  • 实战:批量删除标题行、合并 CSV、修改 CSV 数据

JSON 核心知识点

  • 读写:loads()/dumps(),字符串和 Python 对象互转
  • 文件读写:load()/dump(),直接读写 JSON 文件
  • 实战:API 数据解析、配置文件处理、爬虫数据存储

一句话总结

CSV 管表格,JSON 管接口,Python 自带库就能搞定 90% 的数据处理需求,复制代码改参数就能用,效率直接起飞!


七、实践项目拓展(可直接写进 CSDN)

  1. CSV 批量处理工具:批量合并 CSV、删除指定列、修改数据、生成报表
  2. JSON 配置管理器:自动读取配置文件、修改配置、生成配置模板
  3. 天气提醒小工具:定时获取天气,恶劣天气自动发邮件 / 微信提醒
  4. API 数据可视化:用 JSON 获取股票 / 天气数据,用 Matplotlib 生成图表
http://www.jsqmd.com/news/609896/

相关文章:

  • 别再只用threshold了!Halcon二值化8大算子保姆级对比(附实战避坑指南)
  • 六种AI驱动的文献引用生成策略在学术研究中的高效应用
  • 【信息科学与工程学】【管理科学】第十六篇 利益设计与分配:从静态薪酬到动态激励生态系统的工程化重构
  • 面向法律文书 Agent 的 Harness 条款冲突检测
  • HJ168 小红的字符串
  • Kali+PHPStudy搭建红日靶场:那些教程里没提的玄学问题解决方案
  • 状态对写题很重要
  • React倒计时终极方案:时间对齐+面试必考
  • 【RWA 机制,ERC-4626,ERC-3643,ERC-7540,ERC-7575,LayerZero】
  • 2026降AI率工具实测:SpeedAI科研小助手为什么是首选?
  • 小红书合规引流新姿势:聚光平台落地页卡片制作全流程指南
  • 40岁程序员未裸辞!AI赋能后,我的月薪从6k涨到6.07万,行业真相曝光!
  • 阿姆智创15.6寸工控电脑一体机,源头工厂ODM定制方案,赋能工业产线与机器视觉设备场景
  • 编译即优化:Cuvil在Llama-3-8B本地推理中的延迟压降至127ms,你还在用原生torch.compile?
  • Python数据分析如何重置索引_Pandas的reset_index应用
  • 计算机毕业设计:Python全国空气质量与气象监测平台 Flask框架 可视化 数据分析 机器学习 天气 深度学习 AI 空气质量分析(建议收藏)✅
  • 深入解析MCU:从哈佛架构到智能家居应用
  • 深度可分离卷积
  • CC2530开发入门:用IAR EW8051和SmartRF Flash Programmer烧录第一个Zigbee程序
  • 为什么你的API吞吐量卡在8k QPS?Span<T> + MemoryPool<T>组合拳让Kestrel直冲23k QPS(附压测报告)
  • 头歌实战 3-3 MongoDB 复杂条件查询与数据聚合技巧
  • 从OSG牛模型变黑说起:深入GL3渲染模式与Ubuntu 20.04下的图形开发环境调优
  • 双轴卷取分切机程序,PLC和触摸屏使用西门子smart200系列。 前后卷取双轴张力控制计算
  • eNSP启动AR报错码40终极排查指南:从Hyper-V冲突到虚拟网卡修复
  • IDEA+Maven环境下SuperMap iDesktopX二次开发避坑指南(附完整配置流程)
  • 别再让图片拖慢你的多模态模型了:手把手教你用Q-Former和PruMerge压缩视觉Token(附代码)
  • 避开STC8A8K64S4A12的ADC那些坑:配置寄存器、结果对齐与电压跟随器详解
  • C++ 继承(Inheritance)超详细讲解(含代码+原理+实战)
  • 免费降AI率网站哪个靠谱?2026年18款工具实测对比
  • Java RAG入门基础教程(非常详细),用LangChain4j构建问答系统看这篇就够了!