我的知识记录

Python读取CSV文件 csv模块教程:标准库一行读出来

用Python标准库csv模块读取CSV文件,不需要安装pandas,逐行解析表头和数据,适合小文件和轻量场景,附完整可运行代码。

场景痛点

日常工作里CSV到处都是:导出的订单表、后台日志、产品给的用户清单。用Excel打开会卡、容易乱格式,用记事本看又没法直接处理。想把CSV读进Python做筛选、统计、拼数据,最直接的方式就是用标准库 csv,零依赖、跨平台、Python3自带。

用到的库

# 纯标准库,无需pip安装

完整代码

# 用Python标准库csv读取CSV文件
import csv

def read_csv_with_dictreader(file_path, encoding="utf-8-sig"):
"""
用DictReader按表头读成字典列表,每行是一个dict,key就是列名。
encoding用utf-8-sig可以自动去掉Excel导出CSV开头的BOM。
"""
rows = []
with open(file_path, "r", newline="", encoding=encoding) as f:
reader = csv.DictReader(f)
# 表头
headers = reader.fieldnames
print("表头:", headers)
# 逐行读取
for row in reader:
rows.append(row)
return headers, rows

def read_csv_with_reader(file_path, encoding="utf-8-sig"):
"""
用reader按列表读,第一行是表头,后面每一行是list。
适合不需要列名、只要纯数据的场景。
"""
with open(file_path, "r", newline="", encoding=encoding) as f:
reader = csv.reader(f)
for i, row in enumerate(reader):
print(f"第{i}行:", row)
if i >= 5:  # 只演示前6行
break

def main():
# 把这里换成你自己的CSV路径
file_path = "data.csv"

print("=== DictReader 方式 ===")
headers, rows = read_csv_with_dictreader(file_path)
print(f"共读取 {len(rows)} 行数据")
if rows:
print("第一行数据:", rows[0])

print("\n=== reader 方式 ===")
read_csv_with_reader(file_path)

if __name__ == "__main__":
main()

代码讲解

  • open(..., newline="") 是csv官方推荐写法,防止Windows下多空行。
  • csv.DictReader 把第一行当表头,后续每行变成 {"列名": 值} 的字典,取数据直接 row["姓名"],不用记列下标。
  • csv.reader 更底层,每行是列表 [值1, 值2, ...],适合列数固定、性能敏感的场景。
  • encoding="utf-8-sig" 能兼容Windows记事本和Excel另存为带BOM的CSV,避免表头第一列乱码或多个 \ufeff

运行结果

控制台打印表头、总行数和前几行内容。如果CSV里有"姓名,年龄,城市"三列,DictReader 读出来的每一行就能直接用 row["年龄"] 取到年龄字段。

注意事项

  • 编码不确定时先试 utf-8-sig,乱码再换 gbk(见编码乱码那篇)。
  • 大文件不要一次性 list(reader) 全读进内存,用for循环逐行处理。
  • 数字读进来都是字符串,需要 int() / float() 转类型。
  • 字段里含逗号、换行、英文引号时csv模块会自动处理转义,不用自己split。

Python读取CSV文件 csv模块教程:标准库一行读出来

标签:

更新时间:2026-09-14 20:56:19

上一篇:Python读取JSON文件教程:标准库json详解

下一篇:Python pandas字符串处理分列替换教程