比较两个CSV文件是否存在差异python

时间:2019-10-17 09:45:46

标签: python pandas

python的新手。我的一个文件夹中大约有70个CSV文件。我想比较两种格式的文件,例如 1和2,2和3、3和4 。现在,我的文件具有相同的名称,尽管它们的后缀为 rev,其编号类似于瘦的 Cars * rev1,cars_rev2,cars_rev3,cars rev4 * 。我已经试过了这段代码,但它给出了一个错误:

# your directory path here
path = r'path'

# get all files 
file_, pat = [], re.compile('.csv')
for root, dirs, files in os.walk(path):
    file_ = [os.path.join(root, f) for f in files if pat.search(f)]

# you may want to filter here, this line is just an example
# filter for all csv files containing 'rev'
file_ = [f for f in file_ if 'rev' in f]

temp =[]

for i in range(len(file_)-1):
    file1="cars_rev{}.csv".format(str(i+1))
    file2="cars_rev{}.csv".format(str(i+2))

    df1 = pd.read_csv(file1)
    df2 = pd.read_csv(file2)
    comparison_values = df1.fillna(0).isin(df2.fillna(0)) 
    #print (comparison_values)

    rows, cols = np.where(comparison_values==False)

    for item in zip(rows,cols):
        # do calculation
        for item in zip(rows,cols):
            df1.iloc[item[0], item[1]] = '{} --> {}'.format(df1.iloc[item[0], item[1]],df2.iloc[item[0], item[1]])
            #print(df1)

            temp.append(df1)

有没有一种方法可以使用后缀rev1,rev2,rev3,rev4读取这些文件并成对比较两个

2 个答案:

答案 0 :(得分:0)

使用itertools.tee()解决了以下需求:“我想以这种格式将那些文件成对比较,例如1和2、2和3、3和4。”

Itertools Recipes

中提供了食谱
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b) 

答案 1 :(得分:0)

以下是根据作者要求的bash解决方案:

$ cat compare.sh
#!/bin/bash
for ((i=1;i<=7;i++));
do
    for ((j=i+1;j<=7;j++));
    do
        diff ./cars_rev$i.csv ./cars_rev$j.csv 1>/dev/null
        printf 'diff %s %s = %s\n' cars_rev$i.csv cars_rev$j.csv $?
    done
done

只需将7更改为70或您需要的其他任何内容...