Python CSV和Sum

时间:2011-11-20 13:38:55

标签: python csv

我想用公司名称来计算金额,但公司名称的格式通常不同......例如Apple Inc有时是Apple电脑,Apple Inc. 另外..我不知道如何处理“标题”

我的文件格式为CSV。

company amount
a   20
b   10
A'  30
bb  20

我想这样做:

line = readline() if line=='':
break
if 'Apple' in line:
sum(amount)

2 个答案:

答案 0 :(得分:2)

您的数据不是真正的CSV格式。明显的列不是用逗号分隔,也不是用制表符分隔,甚至不用单个空格分隔。有时会有多个空格...如果这是一个空格分隔值文件,则每个空格都表示一个新列。多个空格意味着每行有两列以上。

此详细信息非常重要,因为csv module可以轻松解析CSV文件。但由于这不是真正的CSV文件,我们无法使用csv模块。

假设总是应该只有两个用空格分隔的列,最后一列代表一个数字量(第一个标题行除外):

total=0
with open('data.csv','r') as f:
    next(f)  # skip the first (header) line 
    for line in f:
        company,amount=line.rsplit(' ',1)
        amount=float(amount)
        if 'Apple' in company:
            total+=amount
print(total)

答案 1 :(得分:0)

您需要以某种方式映射名称变体,方法是分别合计每个名称,然后手动合并,或者预先制作一个字典,用于标识每个公司使用的所有别名。 if 'Apple' in line:失败了,因为它无法将不同公司的金额混合在一起。

Company = {"Apple": 1, "Apple Computer": 1, "AAPL": 1, "Apple, Inc": 1,
           "Apple Vacations": 2, "Applebee's Restaurant": 3 }

sum[Company[name]] += amount

编辑2:如果您事先并不知道所有公司名称,那么您可以做的最好的事情是跟踪输入文件中包含的唯一名称,并决定是否稍后合并它们:

Company = {}
for <name, amount> in file:  # pseudo-code for reading and parsing the input
    if name in Company:
        Company[name] += amount
    else:
        Company[name] = amount