前言

做数据分析、爬虫、办公自动化,绕不开两大数据格式: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)

输出结果:

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

代码讲解

  • 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['成绩']}")

输出:

张三 18 92
李四 19 88
王五 18 95
赵六 19 90
用 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 生成图表

更多推荐