如何';展平';文本文件中的行是否符合使用Python的特定条件?
首先,我是Python和编程的新手,除了web语言 因此,我开发了一个脚本,使用Python作为一个名为Spendmap的软件和一个名为Freeagent的在线应用程序之间的接口。这个脚本非常好用。它导入和解析文本文件,并通过API将其推送到web应用程序 我正在努力解决的是Spendmap每个订单导出多行,而作为Freeagent,每个订单需要一行。因此,我需要添加跨多行的任何订单的成本值,然后将这些行“展平”为一行,以便可以通过API发送。“关键”字段是“采购订单”字段。因此,如果脚本看到任何匹配的订单号,我希望它按照上面的方法将它们展平 这是Spendmap生成的文本文件的“虚拟”示例: 50900716482013-06-052013-09-05,P000001,1133997,223.010,202013-09-10104,xxxxxx,美联社 评论,002091 3010672013-09-062013-09-11,P000002,1133919,42.000,202013-10-31103,xxxxxx,美联社 评论,002143 3010672013-09-062013-09-11,P000002,1133919,359.400,202013-10-31103,xxxxxx,美联社 评论,002143 3010672013-09-062013-09-11,P000003,1133910,23.690,202013-10-31103,xxxxxx,美联社 评论,002143如何';展平';文本文件中的行是否符合使用Python的特定条件?,python,api,Python,Api,首先,我是Python和编程的新手,除了web语言 因此,我开发了一个脚本,使用Python作为一个名为Spendmap的软件和一个名为Freeagent的在线应用程序之间的接口。这个脚本非常好用。它导入和解析文本文件,并通过API将其推送到web应用程序 我正在努力解决的是Spendmap每个订单导出多行,而作为Freeagent,每个订单需要一行。因此,我需要添加跨多行的任何订单的成本值,然后将这些行“展平”为一行,以便可以通过API发送。“关键”字段是“采购订单”字段。因此,如果脚本看到任
为了便于阅读,上面的内容已经格式化,通常只是一行接一行,没有文本格式 “关键”或PO字段是第一个粗体项目,第二个粗体/斜体项目是要合计的成本。因此,如果要通过脚本id传递此示例,则需要添加第二行和第三行成本,因为它们都来自同一个采购订单号,第四行来自左侧 预期结果: 50900716482013-06-052013-09-05,P000001,1133997,223.010,202013-09-10104,xxxxxx,美联社 评论,002091 3010672013-09-062013-09-11,P000002,1133919,401.400,202013-10-31103,xxxxxx,美联社 评论,002143 3010672013-09-062013-09-11,P000003,1133910,23.690,202013-10-31103,xxxxxx,美联社 评论,002143 在此方面的任何帮助将不胜感激,如果您需要任何进一步的细节,请说
提前感谢您的关注 我不会给你答案。但你应该:
祝你好运 我会使用字典来编译这些行,如果已经存在值,则使用
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])
是的,我知道大写字母是用来表示类的,但这样可以更容易地说出我定义了哪些变量…我不确定对数据使用正则表达式,在我看来,它是
csv
格式是正确的方法:这就是csv
模块的用途。哦,是的,我没有发现。或者CSV,如果有效的话。这确实是一个实施细节。非常感谢您的迅速和有益的响应。这里有一个非常好的社区。“上面的格式是为了便于阅读”:不要这样做。这就带来了一个新问题,很难判断你改变了什么。例如,评论是否总是在数据后的一行,或者它们在同一行,而您只是忘记了后面的逗号?抱歉,下次我会知道的。我只是想确保我解释得尽可能清楚。谢谢你的评论。太好了!这正是我想要的。只需要将其与当前脚本集成。非常感谢您的快速及时回复。