Сравните два CSV-файла на различия Python - PullRequest
0 голосов
/ 17 октября 2019

Впервые на питоне. У меня есть около 70 файлов CSV в папке. Я хотел бы сравнить эти файлы в паре из двух, например 1 и 2, 2 и 3, 3 и 4 в этом формате. Теперь мои файлы имеют одно и то же имя, хотя они имеют суффикс rev с таким номером, как thin 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 голосов
/ 18 октября 2019

Вот решение 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 или что вам еще нужно ...

0 голосов
/ 17 октября 2019

Использование itertools.tee () устраняет необходимость: «Я хотел бы сравнить эти файлы в паре двух, например 1 и 2, 2 и 3, 3 и 4 в этом формате».

Существует рецепт Рецепты Itertools

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...