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

张开发
2026/4/8 23:29:38 15 分钟阅读

分享文章

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 读取 CSVimport csv # 打开CSV文件newline避免空行 with open(data.csv, r, newline, encodingutf-8) as f: # 创建reader对象按行读取 reader csv.reader(f) # 遍历每一行reader是可迭代对象 for row in reader: # row是列表每个元素对应一列 print(row)代码讲解csv.reader(f)把文件对象转成 reader按行读取每行是一个列表newlineWindows 系统必加否则会出现多余空行encodingutf-8解决中文乱码问题1.2 用 writer 写入 CSVimport csv # 要写入的数据列表嵌套列表对应表格行 data [ [姓名, 年龄, 成绩], [张三, 18, 95], [李四, 18, 92], [王五, 18, 98] ] with open(output.csv, w, newline, encodingutf-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, encodingutf-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 文件比如用分号分隔的欧洲格式 CSV1.4 高阶读写DictReader/DictWriter最常用用字典读写 CSV直接对应表头不用记列索引可读性拉满用 DictReader 读取按表头取数据import csv with open(data.csv, r, newline, encodingutf-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, encodingutf-8) as f: # 创建DictWriter指定表头 writer csv.DictWriter(f, fieldnamesheaders) # 先写入表头必须 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_okTrue) # 不存在则创建 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, encodingutf-8) as f_in: reader csv.reader(f_in) # 跳过第一行标题行从第二行开始读 rows list(reader)[1:] # 转成列表切片去掉第一行 # 3. 写入CSV文件无标题行 with open(output_path, w, newline, encodingutf-8) as f_out: writer csv.writer(f_out) writer.writerows(rows) print(f已处理{filename}) print(所有CSV标题行删除完成)步骤拆解对应目录遍历 CSV 文件用os.listdir扫描文件夹筛选.csv文件读入 CSV用csv.reader读取转成列表后切片[1:]去掉第一行标题写入新 CSV用csv.writer写入处理后的数据无标题行扩展思路可以加筛选条件只删除特定表头的 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 () 写入 JSONPython 对象→JSON 字符串import json # Python字典要转成JSON的数据 data { name: 张三, age: 18, score: 95, hobbies: [篮球, 编程] } # 把Python字典转成JSON字符串indent4自动格式化ensure_asciiFalse解决中文乱码 json_str json.dumps(data, indent4, ensure_asciiFalse) print(json_str) # 写入JSON文件 with open(data.json, w, encodingutf-8) as f: json.dump(data, f, indent4, ensure_asciiFalse)核心参数 区别函数作用适用场景json.loads()字符串→Python 对象处理 API 返回的 JSON 字符串json.dumps()Python 对象→字符串生成 JSON 字符串、格式化输出json.load()文件→Python 对象读取 JSON 文件json.dump()Python 对象→文件写入 JSON 文件indent4自动缩进格式化 JSON可读性拉满ensure_asciiFalse解决中文乱码必须加五、实战项目 2获取当前天气数据APIJSON 实战这是最经典的 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 fhttps://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生成天气报表 # - 可以加预警功能恶劣天气自动提醒步骤拆解对应目录获取位置用sys.argv从命令行获取城市名灵活输入下载 JSON 数据用requests调用 API获取 JSON 格式的天气数据解析 JSON用json.loads()转成字典提取需要的天气信息输出结果格式化输出天气直观清晰六、全文总结看完就能用CSV 核心知识点基础读写reader/writer适合无表头 CSV高阶读写DictReader/DictWriter适合有表头 CSV最常用实战批量删除标题行、合并 CSV、修改 CSV 数据JSON 核心知识点读写loads()/dumps()字符串和 Python 对象互转文件读写load()/dump()直接读写 JSON 文件实战API 数据解析、配置文件处理、爬虫数据存储一句话总结CSV 管表格JSON 管接口Python 自带库就能搞定 90% 的数据处理需求复制代码改参数就能用效率直接起飞七、实践项目拓展可直接写进 CSDNCSV 批量处理工具批量合并 CSV、删除指定列、修改数据、生成报表JSON 配置管理器自动读取配置文件、修改配置、生成配置模板天气提醒小工具定时获取天气恶劣天气自动发邮件 / 微信提醒API 数据可视化用 JSON 获取股票 / 天气数据用 Matplotlib 生成图表

更多文章