【发布时间】:2014-06-10 15:45:59
【问题描述】:
有一个 csv 文件,比如 A.csv,有内容:
Place,Hotel,Food,Fare
Norway,Regal,NonVeg,5000
Poland,Jenny,Italiano,6000
Norway,Suzane,Vegeterian,4000
Norway,Regal,NonVeg,5000
我必须解析这个 csv 并通过在命令提示符中传递参数来获得输出。
示例 1:
mycode.py Place
期望的输出是:
Place,Fare
Norway,14000
Poland,6000
示例 2:
mycode.py Place Hotel
期望的输出是:
Place,Hotel,Fare
Norway,Regal,10000
Poland,Jenny,6000
Norway,Suzane,4000
因此,从上面的示例中可以清楚地看出,无论您作为参数传递什么,它都会为您提供常见的 Fare 标头的总和。
下面是我的代码,我可以传递参数并获得输出,但我被困在Fare 的总和中。谁能帮我解决这个问题。
import sys
import csv
import collections
d = collections.defaultdict(list)
Data = []
Result = []
Final = []
Argvs = []
argv_len = len(sys.argv)
index = 0
input = ''
file = open('A.csv', 'rb')
try:
reader = csv.reader(file)
for row in reader:
Data.append(row)
for x in range(1, argv_len):
Argvs.append(sys.argv[x])
Argvs.append('Fare')
for input in Argvs:
for y in range(0, len(Data[0])):
if(input == Data[0][y]):
for z in range(1, len(Data)):
Result.append(Data[z][y])
break
Final.append(Result)
Result = []
New = []
NewFinal = []
for x in range(0, len(Final[0])):
for y in range(0, len(Final)):
New.append(Final[y][x])
NewFinal.append(New)
New = []
out = {}
for a in NewFinal:
out.setdefault(a[0],[]).append(int(a[-1]))
with open("output.csv", "wb") as csv_file:
writer = csv.writer(csv_file, dialect='excel', delimiter=',')
writer.writerow(Argvs)
for k,v in out.iteritems():
writer.writerow((k,sum(v)))
except Exception,e:
print str(e)
finally:
file.close()
我编辑了代码并尝试对其进行分组。现在我能够得到Fare 的聚合,但不是所需的输出。
所以当我经过时:
mycode.py Place Hotel
代替:
Place,Hotel,Fare
Norway,Regal,10000
Poland,Jenny,6000
Norway,Suzane,4000
我得到:
Place,Hotel,Fare
Norway,14000
Poland,6000
【问题讨论】:
-
“卡在总数中”是什么意思?你不会对
'Count'做任何事情;它不是数据中的标题,因此永远不会添加到Final。您似乎没有任何用于汇总数据的代码,到目前为止,您的代码只是获取没有任何分组的列。另外,'State' != 'Place'. -
'Count'是指'Fare'吗?如果是这样,这就是为什么你一无所获;您要检索的“标题”必须与实际数据一致。为什么您的第二个示例没有标题'Hotel'? -
这看起来不像 CSV ...
-
非常抱歉。我在创建示例和发布我的实际代码时心不在焉。我的坏:(。编辑了代码。希望现在能给出更好的主意。@jonrsharpe
标签: python parsing python-2.7 csv dictionary