本章学习目标

  • 知道CSV、Excel、JSON三种文件分别怎么读、会遇到什么常见问题
  • 理解每种文件格式的“坑”在哪里,以及如何向AI描述解决方案
  • 学会用“人话”告诉AI你要做什么,让AI生成代码
  • 不需要记住任何函数名或参数,只需要知道“有什么问题”和“怎么描述”

一、核心理念:你不需要记住代码

在AI Agent时代,文件读取的代码不需要你亲手写。

你需要做的是三件事

  1. 知道有什么格式:CSV、Excel、JSON,每种的特点和坑
  2. 知道有什么参数:编码、分隔符、跳过行数、Sheet名 —— 不需要记住拼写,知道“有这个东西”就行
  3. 会描述需求:用自然语言告诉AI你想做什么

打个比方:你不需要知道汽车发动机怎么工作,但你需要知道“车没油了要去加油站”、“轮胎没气了要打气”。同样,你不需要记住pd.read_csv(encoding='utf-8'),但你需要知道“中文乱码时,告诉AI换个编码”。


二、CSV文件读取

2.1 CSV在什么场景用?

场景 为什么用CSV
从数据库导出数据做分析 数据库导出功能通常默认CSV格式
从Kaggle等平台下载数据集 竞赛数据集几乎都是CSV
在团队间传递数据 通用格式,任何人任何工具都能打开
存储清洗后的干净数据 体积小、读写快、没有格式污染

2.2 读取CSV时可能遇到的问题

CSV看起来简单,但实际读取时经常会遇到三个“坑”:

问题 现象 原因 怎么告诉AI
中文乱码 看到ä½ å¥½这样的乱码 文件编码和读取时用的编码不一致 “读取这个CSV时中文乱码了,帮我换GBK编码试试”
首列丢了0 手机号13800138000前面的0没了 手机号被当成数字处理了 “把用户ID列和手机号列当成字符串读取,不要转成数字”
列数对不齐 某一行比其他行多出几列 数据内容里本身就含有逗号 “这个CSV用逗号分隔,但数据里有逗号,帮我处理一下”

2.3 核心参数(只需要知道“有这些参数”)

参数名 它是干嘛的 什么时候用 怎么跟AI说
encoding 指定文件编码 出现中文乱码时 “编码换成GBK / utf-8”
sep 指定分隔符 文件不是用逗号分隔的(比如用Tab) “这个文件用的是竖线分隔,不是逗号”
dtype 指定某列的数据类型 手机号、用户ID不能变成数字 “把手机号列当成字符串读”
nrows 只读前N行 文件太大,先看一眼结构 “先读前100行看看数据长什么样”
chunksize 分块读取 文件太大,内存装不下 “这个文件有2GB,帮我分块读取,每次处理1万行”

2.4 如何向AI描述CSV读取需求(提示词模板)

你的需求 你应该这样告诉AI
正常读取一个CSV “帮我用Python读取这个data.csv文件,显示前5行”
中文乱码 “读取这个CSV时中文显示乱码,帮我用GBK编码重新读”
手机号丢了前导0 “读取CSV时把手机号列当成字符串类型,不要转成数字”
文件太大,先看看结构 “这个CSV有500MB,先只读前1000行让我看看结构”
文件太大,内存装不下 “这个CSV有5GB,内存只有8GB,帮我分块读取,每块处理完后只保留需要的列”

三、Excel文件读取

3.1 Excel在什么场景用?

场景 为什么用Excel
业务部门给你的报表 业务人员熟悉Excel,能做简单计算和图表
包含多张Sheet的数据 一份Excel里可能有“用户表”、“订单表”等多个Sheet
需要保留格式的报告 给别人看的时候,颜色字体都需要保留
数据量不大(10万行以内) Excel能打开,操作流畅

3.2 读取Excel时可能遇到的问题

Excel文件比CSV复杂得多,因为它是给人看的,不是给机器读的。常见问题:

问题 现象 原因 怎么告诉AI
多个Sheet 不知道数据在哪个Sheet 业务人员习惯把相关数据放不同Sheet “读取这个Excel的第二个Sheet,Sheet名叫‘销售明细’”
合并单元格 读取后很多格子是空的 Excel里合并了单元格好看,但数据是不完整的 “合并单元格帮我向下填充,空的地方填成上面的值”
前几行不是数据 第1-3行是标题、Logo、空行 报表模板不是从第一行开始的 “跳过前3行,第4行是列名”
数字存成了文本 无法求和、计算 从别的系统导出时格式没转 “把金额列转成数字类型”

3.3 如何处理这些问题的思路

问题一:多个Sheet

Excel文件就像一本书,Sheet就像书的章节。你需要告诉AI:“我要读第几章”。

应对方式:

  • 没指定:读取第一个Sheet(默认)
  • 知道Sheet名:“读取Sheet名叫‘订单明细’的那个”
  • 知道顺序:“读取第2个Sheet”

问题二:合并单元格

Excel里为了好看,经常会合并单元格,比如:

部门 姓名 销售额
销售部 张三 100
李四 200
王五 150

“↑”表示空,实际应该是“销售部”填充到下面所有行。

应对方式:告诉AI“把合并单元格向下填充,让空的地方自动填成上面非空的值”。

问题三:前几行不是数据

业务人员给的Excel经常长这样:

第1行:【公司Logo】
第2行:2024年销售报表
第3行:(空行)
第4行:部门 | 姓名 | 销售额  ← 这才是真正的列名
第5行:销售部 | 张三 | 100

应对方式:告诉AI“跳过前3行,用第4行作为列名”。

3.4 如何向AI描述Excel读取需求(提示词模板)

你的需求 你应该这样告诉AI
正常读取 “帮我读取这个orders.xlsx文件,显示前5行”
指定Sheet “读取Excel的第2个Sheet,Sheet名叫‘2024年数据’”
有合并单元格 “这个Excel有合并单元格,读取后帮我向下填充空值”
前几行不是数据 “跳过前2行空行和第3行说明,第4行才是真正的列名”
只读某几列 “只读Excel里的A、C、E三列,其他不要”
多个Sheet一起读 “把Excel里所有Sheet都读进来,每个Sheet存成一个DataFrame”

四、JSON文件读取

4.1 JSON在什么场景用?

场景 为什么用JSON
调用Web API获取数据 几乎所有互联网API都返回JSON格式
读取服务器日志 很多日志系统每行存一个JSON对象
处理嵌套/层级数据 JSON天生支持“一对多”的嵌套结构
移动App和服务器的通信 轻量、易解析

4.2 理解“嵌套结构”——JSON最难但最重要的概念

先看CSV/Excel能表达的(平面表格)

user_id name order_id amount
1001 张三 9001 199.5
1001 张三 9002 350.0
1002 李四 9003 89.0

注意:张三的名字重复出现了两次,因为他有两个订单。

再看JSON的表达方式(嵌套)

[
  {
    "user_id": 1001,
    "name": "张三",
    "orders": [
      {"order_id": 9001, "amount": 199.5},
      {"order_id": 9002, "amount": 350.0}
    ]
  },
  {
    "user_id": 1002,
    "name": "李四",
    "orders": [
      {"order_id": 9003, "amount": 89.0}
    ]
  }
]

区别在哪里

维度 CSV/Excel JSON
结构 平面(行×列) 嵌套(可以一层套一层)
重复信息 张三的姓名重复2遍 张三的姓名只写1遍
表达“一对多” 需要多行 用嵌套数组天然表达
机器读取友好
人类直接看懂 嵌套多了有点费眼

4.3 什么时候需要“展开”嵌套结构?

JSON的嵌套结构,对于分析工具(如Excel、Python的pandas)来说是不友好的

分析工具喜欢的是“平面表格”——就是一张方方正正的矩阵,每一行是一条记录,每一列是一个字段。

所以,当你拿到一个嵌套的JSON,想分析里面的数据时,你需要做一件事:把嵌套“展开”(Flatten)成平面表格

展开前(嵌套)

用户A → 订单1、订单2、订单3
用户B → 订单4
用户C → 订单5、订单6

展开后(平面)

用户A | 订单1
用户A | 订单2
用户A | 订单3
用户B | 订单4
用户C | 订单5
用户C | 订单6

一句话理解:展开就是把“一个用户有多个订单”拆成“一行一个订单”,用户的重复信息(如姓名、城市)在每个订单行里都带上。

4.4 JSON中常见的嵌套模式

嵌套模式 长什么样 怎么告诉AI
单层嵌套 用户信息外面包一层,里面是订单列表 “把orders数组展开,每个订单变成一行,保留用户的user_id和name”
多层嵌套 用户 → 订单 → 商品(订单里还有商品列表) “展开到商品级别,每个商品一行,带上用户和订单的信息”
元数据+数据 {"status": "success", "data": [...]} “只取data里面的数组展开,status作为标记保留”

5.5 如何向AI描述JSON读取需求(提示词模板)

你的需求 你应该这样告诉AI
读取简单JSON(每行一个对象) “读取这个data.json文件,它每行是一个JSON对象”
展开嵌套的订单数据 “这个JSON里每个用户有多个订单,帮我展开成平面表格,每个订单一行,用户信息重复带上”
API返回的数据 “调用这个API返回了JSON,取出data字段里的数组,把它转成表格”
多层嵌套 “JSON里用户→订单→商品有三层嵌套,帮我展开到商品级别,每个商品一行”
只取部分字段 “读取这个JSON,只保留user_id、name、和orders里的amount字段”

五、实战:三种文件的“向AI描述”对照表

你的场景 文件类型 你告诉AI的话
从Kaggle下载的数据 CSV “读取这个CSV,显示前10行看看有什么字段”
CSV打开是乱码 CSV “中文乱码了,用GBK编码重新读”
业务给的月度报表 Excel “读取这个Excel,它有合并单元格,帮我向下填充”
Excel有多张Sheet Excel “读取这个Excel的Sheet2,Sheet名叫‘客户明细’”
调用天气API JSON “调用天气API返回的JSON,把它转成表格”
用户画像API JSON(嵌套) “JSON里每个用户有多个标签,帮我展开,每个标签一行”
2GB的超大CSV CSV “文件太大内存装不下,帮我分块读取,每块1万行”

六、本章总结

你只需要记住这三件事

文件类型 核心坑 怎么告诉AI
CSV 中文乱码、数字前丢0、分隔符不是逗号 “换编码”、“转成字符串”、“分隔符是竖线”
Excel 多Sheet、合并单元格、前几行不是数据 “读Sheet2”、“合并单元格向下填充”、“跳过前3行”
JSON 嵌套结构、需要展开 “JSON里有嵌套数组,帮我展开成平面表格”

核心心法

你不需要记住pd.read_csv(encoding='gbk', dtype={'phone': str}) —— 你只需要知道“中文乱码换编码”、“手机号按文本读”。告诉AI,它会生成正确的代码。

思考题

  1. 从业务同事那里拿到一个CSV,打开后中文全是乱码。你怀疑是编码问题。你会怎么告诉AI?

  2. 一个Excel文件,打开后发现:第1-2行是公司Logo和标题,第3行是列名,从第4行开始是数据,而且A列有合并单元格。你会怎么告诉AI去读取?

  3. 调用一个电商API,返回的JSON结构是:外层有statusdatadata里面是一个数组,每个元素是一个订单,每个订单里有order_idproducts(商品列表)。你想分析每个商品的情况。你会怎么告诉AI?

  4. 一个CSV文件有2GB,你的电脑只有8GB内存。直接读取会内存不足。你会怎么告诉AI解决这个问题?


下一节预告:2.3 数据库读取 —— 公司的数据在MySQL里,怎么告诉AI去连接、查询、取数?

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐