Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python按列查找两个csv文件之间的差异_Python_Csv - Fatal编程技术网

使用python按列查找两个csv文件之间的差异

使用python按列查找两个csv文件之间的差异,python,csv,Python,Csv,我有两个csv文件 file1.csv col1,col2,col3 1,2,3 4,5,6 7,8,9 文件2.csv col1,col2,col3 0,2,3 4,0,6 7,8,9 我想比较这两个文件,按列将结果输出到另一个文件。 文件3.csv col1,col2 1,0 0,5 0,0 我试过的代码 import csv with open('file1.csv', 'r') as t1: old_csv = t1.readlines() with open('file2

我有两个csv文件 file1.csv

col1,col2,col3
1,2,3
4,5,6
7,8,9
文件2.csv

col1,col2,col3
0,2,3
4,0,6
7,8,9
我想比较这两个文件,按列将结果输出到另一个文件。 文件3.csv

col1,col2
1,0
0,5
0,0
我试过的代码

import csv
with open('file1.csv', 'r') as t1:
    old_csv = t1.readlines()
with open('file2.csv', 'r') as t2:
    new_csv = t2.readlines()

with open('file3.csv', 'w') as out_file:
    line_in_new = 1
    line_in_old = 1
    leng=len(new_csv)
    out_file.write(new_csv[0])
    while line_in_new < len(new_csv) and line_in_old < len(old_csv):
        if (old_csv[line_in_old]) != (new_csv[line_in_new]):
            out_file.write(new_csv[line_in_new])
        else:
            line_in_old += 1
        line_in_new += 1
这是对stackoverflow中的一个答案稍加修改的版本。如何实现逐列比较


提前谢谢

如果两个CSV文件中的列数和行数相同,可以使用pandas快速获得差异

import pandas as pd

df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')

diff = df1 - df2
diff.to_csv('file3.csv', index=False)
file3.csv内容如下所示:

col1,col2,col3
1,0,0
0,5,0
0,0,0

如果两个CSV文件中的列数和行数相同,则可以使用pandas快速获得差异

import pandas as pd

df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')

diff = df1 - df2
diff.to_csv('file3.csv', index=False)
file3.csv内容如下所示:

col1,col2,col3
1,0,0
0,5,0
0,0,0

如果您已经阅读了您的台词,您可以执行以下操作:

对于范围为MinLenold_csv、lennew_csv的i: 对于zipnew_csv[i].split中的新_值、旧_值、旧_csv[i].split,:您可以在此处添加切片[start:stop],以仅选择某些列 在新文件中写入您想要的内容,例如: new_file.WriteStrentNew_值-输入输入值
我希望这能回答你的问题。

如果你已经读过你的台词,你可以做以下事情:

对于范围为MinLenold_csv、lennew_csv的i: 对于zipnew_csv[i].split中的新_值、旧_值、旧_csv[i].split,:您可以在此处添加切片[start:stop],以仅选择某些列 在新文件中写入您想要的内容,例如: new_file.WriteStrentNew_值-输入输入值
我希望这能回答你的问题。

詹姆斯的回答是正确的,应该能解决你的问题。如果您想避免像ID\u col、string\u cols这样的少数列,您可以尝试下面的代码。cols是要计算差异的列的列表

import pandas as pd 

cols = ['req_col1','req_col2','req_col3']
df3 = pd.DataFrame(cols )
df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')

for col in cols:
    df3[col] =  df1[col] -  df2[col]
df3.to_csv('filepath.csv')

詹姆斯的回答是正确的,应该能解决你的问题。如果您想避免像ID\u col、string\u cols这样的少数列,您可以尝试下面的代码。cols是要计算差异的列的列表

import pandas as pd 

cols = ['req_col1','req_col2','req_col3']
df3 = pd.DataFrame(cols )
df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')

for col in cols:
    df3[col] =  df1[col] -  df2[col]
df3.to_csv('filepath.csv')

您是如何获得文件3输出的?你在做什么样的比较?你的意思是:我想比较这两个文件,按列输出结果到另一个文件。csv?您是如何获得文件3输出的?你在做什么样的比较?你的意思是:我想比较这两个文件,按列输出结果到另一个文件。文件3.csv?