Как я могу сравнить два файла в 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