我想用公司名称来计算金额,但公司名称的格式通常不同......例如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)
答案 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