首页 > 解决方案 > 在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 这样的库?

标签: pythonpython-3.xcsvreader

解决方案


您应该使用 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."

推荐阅读