Как я могу сравнить два файла в Python более эффективно?

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

Итак, давайте рассмотрим два файла X а также Y,

X имеет 42000 записей. Одно слово в строке.

Y имеет 881000. Три слова в строке, то есть три столбца.

Я хочу сравнить слова X файл с первым словом Y файл.

Если я найду X_word в Y_first_column_word затем я пишу слово из второго столбца Y подать в file(Y_second_column_word),

Смотрите код:

to_file = open( output_file, 'w' )                # opening the file to write
f1      = open( input_file1, "rU" ).readlines()   # reading 1st file  42000 records
f2      = open( input_file2, "rU" ).readlines()   # reading 2nd file 881000 records

for i, w1 in enumerate( f1 ):
    for j, line in enumerate( f2 ):
        w2 = line.split(',')                      # splitting words from  2nd file
        if w1.strip() == w2[0].strip():           # removing trails
            if w2[1].strip() == '':               # when it is blank, get 1st column word 
                w2[1] = w2[0]
            print>>to_file, w2[1]

to_file.close()                                   # closing the file

Я провел тесты с тестовыми данными, и он делает то, что я хочу. Но когда я запускаю его с реальными данными, он перестает отвечать на запросы. Моя последняя попытка провела 18 часов.

Есть ли способ улучшить этот код, чтобы он работал более эффективно?

1 ответ

Решение

Ваш текущий подход O(N**2), если вы используете словарь для хранения содержимого второго файла, то вы можете сделать это за линейное время.

with open(input_file1, "rU")as f1, open(input_file2, "rU") as f2:
    words_dict = {k:v for k, v, _ in (line.split(',') for line in f2)}
    for word in f1:
        word = word.rstrip()
        if word in words_dict:
           #write words_dict[word] to to_file
Другие вопросы по тегам