В принципе, я хотел создать скрипт Python для своих ежедневных задач, в котором мне захотелось сравнить два файла с любым размером &, захотелось сгенерировать 2 новых файла, имеющих соответствующие записи & несоответствующие записи из обоих файлов.python - Проблема с обработкой файлов большого размера
Я написал ниже скрипт python & нашел, что он исправно работает для размера файла, имеющего несколько записей.
Но когда я выполняю тот же скрипт с файлами с 200 000 и 500 000 записями, то в результате получения файла создается недействительный вывод.
Итак, вы можете проверить ниже сценарий и помочь определить проблему в нем, вызывая неправильный вывод ...?
Заранее спасибо.
from sys import argv
script, filePathName1, filePathName2 = argv
def FileDifference(filePathName1, filePathName2):
fileObject1 = open(filePathName1,'r')
fileObject2 = open(filePathName2,'r')
newFilePathName1 = filePathName1 + ' - NonMatchingRecords.txt'
newFilePathName2 = filePathName1 + ' - MatchingRecords.txt'
newFileObject1 = open(newFilePathName1,'a')
newFileObject2 = open(newFilePathName2,'a')
file1 = fileObject1.readlines()
file2 = fileObject2.readlines()
Differece = [ diff for diff in file1 if diff not in file2 ]
for i in range(0,len(Differece)):
newFileObject1.write(Differece[i])
Matching = [ match for match in file1 if match in file2 ]
for j in range(0,len(Matching)):
newFileObject2.write(Matching[j])
fileObject1.close()
fileObject2.close()
newFileObject1.close()
newFileObject2.close()
FileDifference(filePathName1, filePathName2)
Редактировать-1: Обратите внимание, что программа выше без ошибок. Его просто то, что вывод неверен, и программа занимает гораздо больше времени, чтобы получить большой файл.
Какая ошибка или как вы можете сказать, что это недопустимый результат. может дать несколько примеров –
Я бы сказал, что вам придется превратить 'file2' в' set' или время поиска будет ужасно со списком. Собственно, создавайте наборы из обоих списков строк и выполняйте пересечение/разницу с помощью методов 'set'. Это будет намного быстрее. –
Я думаю, вы имеете в виду: «он никогда не заканчивается/он работает вечно», правильно? –