Сравнение двух файлов с разделителями каналов, строка за строкой, где строки не в порядке в другом файле, используя Python - PullRequest
0 голосов
/ 30 марта 2020

У меня есть два текстовых файла с огромным количеством записей, записи разделены каналом. Мне нужно сравнить оба текстовых файла на предмет сходства данных в обоих файлах. Скажем, File1 и File2 должны иметь одинаковые записи. Однако, несмотря на то, что они имеют одинаковые записи, они не отображаются в одинаковых строках. скажем, запись1 в файле1 может быть в строке 10, но та же запись1 в файле2 не обязательно находится в той же строке, она может появиться в любой строке. Теперь мне нужно взять row1 в file1, нужно go просмотреть все записи в file2 и посмотреть, где происходит совпадение. Кроме того, мне нужно проверить все строки в file1. Меня больше беспокоит, что строки file1 сопоставляются с file2, затем file2 сопоставляется с file1, поскольку file2 может иметь несколько избыточных записей.

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

Может кто-нибудь посоветует, как этого добиться?

CodeLink: https://gist.github.com/insachin/c960cfeb1fef6454a8132a07cb9ebd5a

# Ask the user to enter the names of files to compare
fname1 = input("Enter the first filename: ")
fname2 = input("Enter the second filename: ")

# Open file for reading in text mode (default mode)
f1 = open(fname1)
f2 = open(fname2)

# Print confirmation
print("-----------------------------------")
print("Comparing files ", " > " + fname1, " < " + fname2, sep='\n')
print("-----------------------------------")

# Read the first line from the files
f1_line = f1.readline()
f2_line = f2.readline()

# Initialize counter for line number
line_no = 1

# Loop if either file1 or file2 has not reached EOF
while f1_line != '' or f2_line != '':

    # Strip the leading whitespaces
    f1_line = f1_line.rstrip()
    f2_line = f2_line.rstrip()

    # Compare the lines from both file
    if f1_line != f2_line:

        # If a line does not exist on file2 then mark the output with + sign
        if f2_line == '' and f1_line != '':
            print(">+", "Line-%d" % line_no, f1_line)
        # otherwise output the line on file1 and mark it with > sign
        elif f1_line != '':
            print(">", "Line-%d" % line_no, f1_line)

        # If a line does not exist on file1 then mark the output with + sign
        if f1_line == '' and f2_line != '':
            print("<+", "Line-%d" % line_no, f2_line)
        # otherwise output the line on file2 and mark it with < sign
        elif f2_line != '':
            print("<", "Line-%d" % line_no, f2_line)

        # Print a blank line
        print()

    # Read the next line from the file
    f1_line = f1.readline()
    f2_line = f2.readline()

    # Increment line counter
    line_no += 1

f1.close()
f2.close()
...