Как сравнить только часть двух файлов, содержащих одинаковую информацию о столбце?

#python #diff

#питон #разница #python

Вопрос:

Я пытаюсь сравнить два выходных файла модели, но моделирование модели имеет разные диапазоны дат, поэтому мне нужно сравнить файлы на основе аналогичных дат моделирования. Ниже приведено изображение файлов, которые я сравниваю. В частности, мне нужно начать сравнение с 2010-1-1 в обоих файлах. Я не хочу просто пропускать первые строки второго файла, потому что я хочу иметь возможность использовать метод сравнения для нескольких запусков модели с разными диапазонами дат

введите описание изображения здесь

Я сравнил файлы с помощью difflib, но не смог понять, как выполнить сравнения, основанные только на похожих записях даты.

 for line in difflib.unified_diff(dif1, dif2):
    print (line)
  

Используя описанный выше метод, я получаю, что все строки разные.

Файлы можно скачать здесь. https://www.dropbox.com/sh/tg6y16gix7ran42/AADpMNcZd2ugPQ28Z30Bj9bWa?dl=0

Ответ №1:

Попробуйте использовать это:

 def first_file():

    while True:
        x = int(input('Column: '))
        if x == 0:
            break
        with open('test.txt', 'r') as f:
            for line in f:
                if 'tide' in line or 'Date' in line:
                    pass
                else:
                    a = line.split()
                    compare(a,x)
                        

    
def compare(a,x):
    with open('test1.txt', 'r') as f1:
        for line1 in f1:
            if 'tide' in line1 or 'Date' in line1:
                pass
            else:
                b = line1.split()
                if a[1] == b[1]:
                    if a[x 2] != b[x 2]:
                        print(a[1])
                        print(a[x 2]   ' != '   b[x 2])
    return

first_file()
  

Комментарии:

1. Спасибо, Ктото. Я реализовал код, но я продолжаю получать следующий столбец ошибок: 2010 IndexError: индекс списка вне диапазона. У вас есть какие-нибудь мысли? Я думал о преобразовании его в csv, возможно, это помогло бы

2. Можете ли вы опубликовать используемые вами наборы данных, ваши входные и выходные данные?

3. Файлы сравнения можно найти здесь: dropbox.com/sh/tg6y16gix7ran42/AADpMNcZd2ugPQ28Z30Bj9bWa?dl=0

Ответ №2:

difflib сравнивает два файла построчно. Он не заботится о значении данных, а сравнивает только текст напрямую. Чтобы сделать то, что вы хотите, вам нужно будет самостоятельно написать код для синтаксического анализа файлов, а затем сравнить части, которые вы хотите сравнить. Я предлагаю вам начать с написания синтаксического анализатора либо со стандартного csv пакета, либо с pandas . Затем вам следует разработать алгоритм для сравнения двух структур данных. Начните с словесного описания шагов по их сравнению. Затем переведите эти слова в код.