Python 2个CSV文件。在迁移之前和之后执行。要将计数与阈值进行比较吗

Python 2个CSV文件。在迁移之前和之后执行。要将计数与阈值进行比较吗,python,csv,compare,Python,Csv,Compare,我有2个csv文件,如: 格式 报告编号、执行、报告名称、报告计数 在.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 基本上,我需要让每个报告计数比较报告计数,然后输出第三个csv,其中包含报告名称、报告计数前、报告计数后,当存在阈值交叉时(当之后的与之前的差异超过10%)。EXEC只是一

我有2个csv文件,如:

格式

  • 报告编号、执行、报告名称、报告计数
在.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
基本上,我需要让每个报告计数比较报告计数,然后输出第三个csv,其中包含报告名称、报告计数前、报告计数后,当存在阈值交叉时(当之后的与之前的差异超过10%)。EXEC只是一个执行运行

因此result.csv可能会显示:

  • 2,1,“报告2”,45645656
  • 3,1,“报告3”,11,0
  • 4,1,“报告4”,0212
我从以下几个方面寻求灵感:

我会继续搜索,但任何反馈都会得到感谢

提前谢谢你


p、 我假设Python是最好的,我不介意什么语言,但我有基本的Python理解。我开始在bash中写这篇文章,并使用“diff”和“sed”。。因此,我可能会走这条路线。

基于您提供的两个链接:

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])])
导入csv
与前面一样打开('before.csv','r'):
before_index=dict((i[2],i[3]),用于csv.reader中的i(before))
将open('after.csv','r')作为reportAfter:
打开('results.csv','w')作为结果:
reader=csv.reader(reportAfter)
writer=csv.writer(结果,quoting=csv.QUOTE_非数字)
对于读取器中的行:
value=在_index.get之前(第[2]行)
如果浮动(第[3]行)大于1.1*浮动(值)或浮动(第[3]行)小于0.9*浮动(值):
writer.writerow([int(第[0]行)、int(第[1]行)、第[2]行、int(值)、int(第[3]行]))

这将根据linux上的示例输入生成所需的输出。在windows上,您需要根据此进行更改。如果您有非整数,您可能希望将最后一行中的int()更改为float(),以保留小数。

这很好:)只是一个简单的问题-如果我需要调整%公差,比如说5%,我会更改1.1和0.9值?是的,这是正确的,请记住,比较非常小或非常大的数字需要小心,因为浮点精度。对不起,我以为我可以调整(5%,到0.6>和0.4),但事实似乎并非如此。。很抱歉在这件事上是个傻瓜。您能给我一些如何使用的指导吗?对于5%的差异,您需要调整到大于5%的多
>1.05
或小于5%的少
<0.95
,基本上
1.0-5%或+5%
谢谢您,先生,祝您愉快!