我有两个csv文件,比如:
格式
- REPORT_NUM、EXEC、REPORT_NAME、REPORT_COUNT
在.csv之前
- 1,1,"报告1",45
- 2,1,"报告2",456
- 3,1,"报告3",11
- 4,1,"报告4",0
在.csv之后
- 1,1,"报告1",47
- 2,1,"报告2",456556
- 3,1,"报告3",0
- 4,1,"报告4",212
我基本上需要每个REPORT_NUM比较REPORT_COUNT,然后在REPORT_COOUNT之前、REPORT_COUNCT之后输出第三个csv(当之后的与之前的>相差超过10%时)。EXEC只是一个执行运行。
因此,result.csv可能显示:
- 2.1,"报告2",456456556
- 3,1,"报告3",11,0
- 4,1,"报告4",0212
我正在寻找以下灵感:
比较2个CSV文件之间的值并写入第三个CSV文件
Python:比较两个CSV文件并搜索类似项目
我继续搜索,但任何反馈都很感激。
提前谢谢!
附言:我认为Python是最好的,我不介意用什么语言,但我对Python有基本的理解。我开始在bash中写这篇文章,并使用"diff"one_answers"sed"。。所以我可以走那条路。。
基于您给出的2个链接:
import csv
with open('before.csv', 'r') as before:
before_indices = dict((i[2], i[3]) for i in csv.reader(before))
with open('after.csv', 'r') as reportAfter:
with open('results.csv', 'w') as results:
reader = csv.reader(reportAfter)
writer = csv.writer(results, quoting=csv.QUOTE_NONNUMERIC)
for row in reader:
value = before_indices.get(row[2])
if float(row[3]) > 1.1*float(value) or float(row[3]) < 0.9*float(value):
writer.writerow([int(row[0]),int(row[1]),row[2],int(value),int(row[3])])
在给定linux上的示例输入的情况下,这将生成所需的输出。在windows上,您需要根据Python3进行更改:编写csv文件。如果您有非整数,您可能需要将最后一行的int()更改为float()以保留小数。