跳转到主内容
极星编程网:以代码为星,赴技术山海!

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

本文介绍如何不依赖 csv 等外部模块,仅用内置函数将 CSV 文件解析为以表头为键、对应单元格为值的字典列表,适用于初学者理解文件处理与数据结构映射的核心逻辑。 本文介绍如何不依赖 ` csv ` 等外部模块,仅用内置函数将 csv 文件解析为以表头为键、对应单元格为值的字典列表,适用于初学者理解文件处理与数据结构映射的核心逻辑。 在 Python 中,将 CSV 文件转换为结构化字典是常见需求——尤其当需要逐行处理表格数据,且希望每行都以可读性强的键值对形式呈现时。关键在于: 分离表头行与数据行,并建立字段名(header)与字段值(value)之间的位置映射关系 。以下方案完全基于 Python 内置功能(open()、next()、strip()、split() 和 zip()),简洁、高效、无依赖。 ✅ 核心实现步骤 打开文件并读取首行作为表头 :使用 next(f) 安全获取第一行,避免将其纳入循环; 清洗并分割表头 :调用 .strip() 去除换行符等空白字符,再用 .split(',') 得到字段名列表; 逐行处理剩余数据 :对每一行重复清洗与分割,得到值列表; 用 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 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 立即学习 “ 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 打下坚实基础。

相关文章