python - 在excel中区分分隔符和内容字符
问题描述
我有一个看起来像这样的 excel .csv 文件
id,ticker1,ticker2,Company,Supplier
9,MMM,DHR,3M Company,Danaher Corporation
10,MMM,IBM,3M Company,International Business Machines Corporation
11,MMM,UNP,3M Company,Union Pacific Corporation
12,MMM,TMO,3M Company,Thermo Fisher Scientific Inc.
13,MMM,NSC,3M Company,Norfolk Southern Corporation
61,No,0,,
14,MMM,TER,3M Company,"Teradyne, Inc."
这里的数据用逗号分隔,所以我使用 delimiter=','
,但在某些情况下,如最后一行,文本中也有逗号。在我的 csv 文件中,所有带逗号的字符串都在引号中" "
。我试图用 open() 读取文件
with open('file.csv','r') as f:
for row in f.read().split('\n'):
但是这样我必须处理逗号和空值。所以我很好奇哪种是处理损坏的 csv 文件的正确方法?我应该使用正则表达式还是像 pandas 这样的库?
解决方案
您应该使用 pythonscsv
模块。它正是为此目的而设计的。为了消除诸如解析分隔符可以出现在字段内的 csv 数据等事情的复杂性。
这是一个简单的例子。我使用的csv
模块DictReader
将读取 CSV 的第一行作为键名,然后将每个后续行映射为键值。它会自动处理供应商字段中的逗号。
import csv
with open("sample.csv") as my_csv:
for row in csv.DictReader(my_csv):
print(f'id {row["id"]} has supplier "{row["Supplier"]}"')
输出
id 9 has supplier "Danaher Corporation"
id 10 has supplier "International Business Machines Corporation"
id 11 has supplier "Union Pacific Corporation"
id 12 has supplier "Thermo Fisher Scientific Inc."
id 13 has supplier "Norfolk Southern Corporation"
id 61 has supplier ""
id 14 has supplier "Teradyne, Inc."
推荐阅读
- python - VideoCapture 显示“无摄像头访问”占位符图像
- connection-string - 如何在 vb.net 中将连接字符串 oledb 路径更改为当前桌面用户路径
- python - 网络抓取图像标题时,“NoneType”对象不可下标
- azure - 如何使用 Rest API 在 azure synapse 分析项目中创建管道?
- c# - 如何在 .Net MVC 5 中使用个人用户帐户实现单点登录?
- java - 记录 RestTemplate 生成的异常时如何打印完整的错误消息?
- java - if 语句不能根据条件加 1
- javascript - 用其他函数创建函数有哪些简单的方法
- ruby - Docker 构建失败 - 无法找到包
- python - Python websocket 多个消息监听器