首先,我是Python的新成员,并编写除Web语言之外的任何其他内容。
因此,我开发了一个脚本,使用Python作为一个名为Spendmap的软件和一个名为Freeagent的在线应用程序之间的接口。这个脚本完美无缺。它导入并解析文本文件,并通过API将其推送到Web应用程序。
我正在努力的是Spendmap每个订单导出多行,而Freeagent想要每个订单一行。因此,我需要添加分布在多行中的任何订单的成本值,然后将这些行“展平”为One,以便可以通过API发送。 'key'字段是'PO'字段。因此,如果脚本看到任何匹配的PO编号,我希望它按照上面的方法展平它们。
这是Spendmap生成的文本文件的“虚拟”示例:
5090071648,2013-06-05,2013-09-05,的 P000001 下,1133997,的 223.010 下,20,2013-09- 10104,XXXXXX,AP COMMENT,002091
301067,2013-09-06,2013-09-11,的 P000002 下,1133919,的 42.000 下,20,2013-10- 31103,XXXXXX,AP COMMENT,002143
301067,2013-09-06,2013-09-11,的 P000002 下,1133919,的 359.400 下,20,2013-10- 31103,XXXXXX,AP COMMENT,002143
301067,2013-09-06,2013-09-11,的 P000003 下,1133910,的 23.690 下,20,2013-10- 31103,XXXXXX,AP COMMENT,002143
以上内容已经过格式化,以便于阅读,通常只是在下一行之后没有文本格式的一行。
'key'或PO字段是第一个粗体项目,第二个粗体/斜体项目是要合计的成本。因此,如果要通过脚本ID传递此示例,则期望第一行保持不变,第二行和第三行成本要添加,因为它们都来自相同的PO编号而第四行是单独留下的。
预期结果:
5090071648,2013-06-05,2013-09-05,的 P000001 下,1133997,的 223.010 下,20,2013-09- 10104,XXXXXX,AP COMMENT,002091
301067,2013-09-06,2013-09-11,的 P000002 下,1133919,的 401.400 下,20,2013-10- 31103,XXXXXX,AP COMMENT,002143
301067,2013-09-06,2013-09-11,的 P000003 下,1133910,的 23.690 下,20,2013-10- 31103,XXXXXX,AP COMMENT,002143
如果您需要任何进一步的详细信息,我们将非常感谢您提供帮助。
提前感谢您的期待!
答案 0 :(得分:2)
我不会给你解决方案。但你应该:
答案 1 :(得分:0)
我会使用字典来编译这些行,如果它们已经存在则使用get(key,0.0)
求和,或者如果不存在则从零开始:
InputData = """5090071648,2013-06-05,2013-09-05,P000001,1133997,223.010,20,2013-09-10,104,xxxxxx,AP COMMENT,002091
301067,2013-09-06,2013-09-11,P000002,1133919,42.000,20,2013-10-31,103,xxxxxx,AP COMMENT,002143
301067,2013-09-06,2013-09-11,P000002,1133919,359.400,20,2013-10-31,103,xxxxxx,AP COMMENT,002143
301067,2013-09-06,2013-09-11,P000003,1133910,23.690,20,2013-10-31,103,xxxxxx,AP COMMENT,002143"""
OutD = {}
ValueD = {}
for Line in InputData.split('\n'):
# commas in comments won't matter because we are joining after anyway
Fields = Line.split(',')
PO = Fields[3]
Value = float(Fields[5])
# set up the output string with a placeholder for .format()
OutD[PO] = ",".join(Fields[:5] + ["{0:.3f}"] + Fields[6:])
# add the value to the old value or to zero if it is not found
ValueD[PO] = ValueD.get(PO,0.0) + Value
# the output is unsorted by default, but you could sort or preserve original order
for POKey in ValueD:
print OutD[POKey].format(ValueD[POKey])
P.S。是的,我知道Capitals是针对Classes的,但是这样可以更容易地说出我定义的变量......