在excel中区分分隔符和内容字符

2024-10-02 18:15:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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文件的正确方法?我应该像熊猫一样使用正则表达式还是LIB


Tags: 文件csvidopenexcelcompanyincsupplier
3条回答

在我的特殊情况下,文本中的所有逗号都在"Teradyne, Inc."之前,因此我使用replace函数string.replace(', Inc','')删除了逗号。删除文本中的逗号后,我可以split(',')下面的答案Long Doan中描述的每一行/每一行

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

我建议:

with open('file.csv','r') as f:
content = f.read()
content = content.split('\n') #split paragraph
data = []
for i in content:
    data.append(i.split(',')) #split each value

预期结果将是列表的列表。所有缺失的数据都将被表示为“”,在“内容”循环期间,您可以在其中更改为其他表示

相关问题 更多 >