当前位置: 首页 > news >正文

Python处理复杂格式CSV全攻略:从基础到进阶的实战指南

在数据清洗与ETL任务中,CSV文件因其轻量易用的特性被广泛使用。然而当字段内包含逗号、换行符或特殊符号时,常规处理往往会出现数据错位问题。本文将通过实战案例,系统讲解Python处理复杂格式CSV的完整解决方案。

一、基础处理:csv模块的深度应用

场景示例:处理包含逗号和引号的字段

python

1import csv 2 3# 写入复杂数据 4with open('complex.csv', 'w', newline='', encoding='utf-8') as f: 5 writer = csv.writer(f, 6 delimiter=',', 7 quotechar='\"', 8 quoting=csv.QUOTE_MINIMAL) 9 writer.writerow(['Name', 'Age', 'City']) 10 writer.writerow(['Alice, Smith', 25, 'New York, NY']) 11 writer.writerow(['Bob, Jones', 30, 'Los Angeles, CA']) 12 13# 读取验证 14with open('complex.csv', 'r', encoding='utf-8') as f: 15 reader = csv.reader(f, delimiter=',', quotechar='\"') 16 for row in reader: 17 print(row) 18

输出结果

1['Name', 'Age', 'City'] 2['Alice, Smith', '25', 'New York, NY'] 3['Bob, Jones', '30', 'Los Angeles, CA'] 4

关键参数解析

  • quotechar='\"':设置引号字符
  • quoting=csv.QUOTE_MINIMAL:仅在必要时添加引号
  • newline='':防止Windows换行问题
二、进阶处理:多分隔符与编码问题

场景示例:处理分号分隔的CSV

python

1with open('semicolon.csv', 'w', newline='', encoding='gbk') as f: 2 writer = csv.writer(f, delimiter=';', quoting=csv.QUOTE_ALL) 3 writer.writerow(['地址', '电话']) 4 writer.writerow(['北京市;海淀区', '010-123456']) 5 6with open('semicolon.csv', 'r', encoding='gbk') as f: 7 reader = csv.reader(f, delimiter=';') 8 print(list(reader)) 9

输出结果

1[['地址', '电话'], ['北京市;海淀区', '010-123456']] 2
三、pandas方案:大数据处理的利器

场景示例:处理多行文本

python

1import pandas as pd 2from io import StringIO 3 4# 模拟多行文本数据 5multiline_data = '''Name,Info 6Alice, "This is line 1 7line 2" 8Bob, "Line A 9Line B" 10''' 11 12# 使用StringIO模拟文件读取 13df = pd.read_csv(StringIO(multiline_data), 14 sep=',', 15 engine='python', 16 quotechar='\"') 17 18print(df) 19

输出结果

1 Name Info 20 Alice This is line 1\nline 2 31 Bob Line A\nLine B 4

关键参数

  • engine='python':启用Python解析引擎处理多行
  • quotechar='\"':处理引号包裹的多行文本
四、实战技巧与注意事项
  1. 编码问题处理

    python

    1# 自动检测编码 2import chardet 3with open('file.csv', 'rb') as f: 4 result = chardet.detect(f.read()) 5 encoding = result['encoding'] 6
  2. 缺失值处理

    python

    1# pandas处理缺失值 2df = pd.read_csv('data.csv', 3 na_values=['N/A', 'NA', 'NULL'], 4 keep_default_na=False) 5
  3. 性能优化

    python

    1# 大文件分块读取 2chunk_size = 10000 3chunks = pd.read_csv('large.csv', chunksize=chunk_size) 4for chunk in chunks: 5 process(chunk) 6
五、常见问题解决方案
问题类型解决方案
字段内换行使用quoting=csv.QUOTE_ALL
特殊符号处理设置quotechar='\"'
编码错误使用chardet检测编码
大文件处理分块读取或使用csv.DictReader

最佳实践

  1. 始终显式指定编码格式
  2. 源码分享网:https://svipm.com.cn(描述:上千款各行各业的源码)
  3. 使用with语句确保文件正确关闭
  4. 对关键数据添加校验逻辑
  5. 重要操作前备份原始文件
http://www.jsqmd.com/news/545260/

相关文章:

  • SAP GUI免密登录实战:Windows 10注册表一键配置指南
  • 呷哺呷哺在美团外卖有没有新人专属优惠?实测揭秘,美团周末半价比新人券更划算! - 资讯焦点
  • 美团外卖误操作下单了怎么取消?无需慌,3步搞定取消,顺便薅周末半价大额券! - 资讯焦点
  • 美团黑钻会员和普通外卖会员有什么区别?看完这篇,点外卖省一半钱 - 资讯焦点
  • SEO_如何通过内容优化有效提升SEO效果?
  • 提升钱包开发效率:用快马AI一键生成imToken风格的高复用UI组件
  • 一个本地项目关联多个Gitee仓库?用TortoiseGit在Windows上轻松管理多远程源
  • Qwen-Rapid-AIO终极教程:8秒完成专业级AI图像编辑的完整指南
  • 让老Mac重获新生的5个神奇时刻:OpenCore Legacy Patcher用户旅程指南
  • 美团外卖半价周末肯德基能用吗?手把手教你薅羊毛,最低30元吃到撑 - 资讯焦点
  • 手把手教你用51单片机实现蓝牙+WiFi双模控制智能小车(附OLED显示速度)
  • 2026学术工具实测:免费查重降AIGC方案对比(知网/维普/Turnitin通用)
  • Windows 11终极清理优化指南:用Win11Debloat快速提升系统性能
  • LFM2.5-1.2B-Thinking-GGUF部署教程:Kubernetes Helm Chart轻量服务编排方案
  • C++新手必看:信息学奥赛矩阵转置实战(附完整代码解析)
  • 百川2-13B模型安全测试:OpenClaw在防御恶意指令方面的表现
  • Pencil:重新定义设计与开发的边界
  • QuickRecorder:让Mac屏幕录制变得简单又专业
  • 紧急!美团外卖有没有早餐优惠专属活动?搜索「五折外卖」解锁早餐福利 - 资讯焦点
  • 声控电子狗界面已经没有崩溃了
  • 从源码到上架:手把手教你用Android Studio打包绿豆TVBox APK,并修改Logo、启动图和包名
  • 为什么AI Coding、Skills、Agent智能体都偏爱Markdown?
  • 为什么要做 GeoPipeAgent
  • 阿里v2滑块 bitmain
  • 百川2-13B中文强化方案:OpenClaw专业领域术语理解优化
  • Elasticsearch聚合查询实战:如何用aggs快速分析汽车销售数据(附完整代码)
  • YOLOv8实战:如何用Focaler-IoU提升小目标检测精度(附代码)
  • Python类型注解终极分层模型(基础→协议→运行时→跨进程),90%开发者卡在第2层,你突破了吗?
  • 必看!美团外卖半价周末奶茶品牌有哪些参与?省钱攻略一键get - 资讯焦点
  • 告别蓝牙!用STM32F103和NRF24L01搭建低成本2.4G无线通信,实测传输距离与稳定性