如何将 CSV 文件逐行读取为字典(纯 Python,无需第三方模块)

5次阅读

如何将 CSV 文件逐行读取为字典(纯 Python,无需第三方模块)

本文介绍如何不依赖 csv 等外部模块,仅用内置函数将 CSV 文件解析为以表头为键、对应单元格为值的字典列表,适用于初学者理解文件处理与数据结构映射的核心逻辑。

本文介绍如何不依赖 `csv` 等外部模块,仅用内置函数将 csv 文件解析为以表头为键、对应单元格为值的字典列表,适用于初学者理解文件处理与数据结构映射的核心逻辑。

python 中,将 CSV 文件转换为结构化字典是常见需求——尤其当需要逐行处理表格数据,且希望每行都以可读性强的键值对形式呈现时。关键在于:分离表头行与数据行,并建立字段名(header)与字段值(value)之间的位置映射关系。以下方案完全基于 Python 内置功能(open()、next()、strip()、split() 和 zip()),简洁、高效、无依赖。

✅ 核心实现步骤

  1. 打开文件并读取首行作为表头:使用 next(f) 安全获取第一行,避免将其纳入循环
  2. 清洗并分割表头:调用 .strip() 去除换行符等空白字符,再用 .split(‘,’) 得到字段名列表;
  3. 逐行处理剩余数据:对每一行重复清洗与分割,得到值列表;
  4. 用 zip() 与 dict() 构建字典:zip(headers, values) 将同位置的键与值配对,dict() 直接生成所需字典。

? 完整可运行示例

假设 data.csv 文件内容如下:

Name,Age,City Alice,28,Beijing Bob,35,Shanghai Charlie,22,Guangzhou

执行以下代码:

with open("data.csv", "r", encoding="utf-8") as f:     headers = next(f).strip().split(",")     for line in f:         values = line.strip().split(",")         row_dict = dict(zip(headers, values))         print(row_dict)

输出结果为:

立即学习Python免费学习笔记(深入)”;

{'Name': 'Alice', 'Age': '28', 'City': 'Beijing'} {'Name': 'Bob', 'Age': '35', 'City': 'Shanghai'} {'Name': 'Charlie', 'Age': '22', 'City': 'Guangzhou'}

? 提示:若需将所有字典收集为列表(而非逐行打印),可初始化 result = [],并在循环内执行 result.append(row_dict)。

⚠️ 注意事项与最佳实践

  • 编码兼容性:务必显式指定 encoding=”utf-8″(尤其在 windows 或含中文字段/值时),避免 UnicodeDecodeError;
  • 空行与异常处理:上述代码未处理空行或列数不匹配的情况。生产环境建议添加校验:
    if not values or len(values) != len(headers):     continue  # 或抛出警告/异常
  • 内存效率:该方法按行流式处理,适合大文件;如需全部加载到内存,仍保持低开销;
  • 不支持复杂 CSV 特性:如带逗号的字段(”A,B”,C)、引号转义、换行符等——此时应改用标准 csv 模块。

✅ 总结

本方案以最少代码实现了 CSV 到字典的精准映射,其本质是利用 zip() 的“并行迭代”特性完成键值对齐。它不仅解决了原始问题中“表头作键、单元格作值”的核心诉求,更体现了 Python 内置函数组合使用的优雅性。掌握这一模式,有助于深入理解数据解析的底层逻辑,也为后续学习 pandas 或 csv.DictReader 打下坚实基础。

text=ZqhQzanResources