например
1.тхт (неакутальный) в нем:
1
2
3
4
5
2.тхт (актуальный) в нем:
1
3
6
7
8
9
нужно получить файл .тхт чтобы в нем было
1
3
в моем файле 1.тхт и 2.тхт ~ 1млн строк
Python
Есть два файла .txt нужно сопоставить данные и вытащить актуальные
Если сохранение порядка неважно, то так:
А если важно, то тот файл, чей порядок сохраняем, читать в список, а не в множество. Или вообще обойтись итератором:
Если нужно записать в файл final.txt, то так:
1-2 млн строк - это не так много, в памяти современного компа поместится с большим запасом. Без чтения в память пересечение двух неотсортированных файлов эффективно найти нереально.
А вот если задача стоит найти пересечение двух отсортированных файлов, то она решается за линейное время. Нужно читать оба файла параллельно. И в памяти их тогда хранить не придётся, можно сразу выводить в результирующий файл.
with open("1.txt", "r") as f:
s1 = set(s.rstrip() for s in f.readlines())
with open("2.txt", "r") as f:
s2 = set(s.rstrip() for s in f.readlines())
print(s1, s2, s1 & s2, sep = '\n')
Сложность O((n1 + n2) ∙ log(n1 + n2)), где n1 и n2 - кол-во строк в файлах.А если важно, то тот файл, чей порядок сохраняем, читать в список, а не в множество. Или вообще обойтись итератором:
with open("1.txt", "r") as f:
s1 = set(s.rstrip() for s in f.readlines())
with open("2.txt", "r") as f:
s2 = (s.rstrip() for s in f.readlines() if s.rstrip() in s1)
print(*s2, sep = '\n')
Этот код сохраняет порядок строк по второму файлу и не зачитывает весь второй файл в память.Если нужно записать в файл final.txt, то так:
with open("1.txt", "r") as f:
s1 = set(f.readlines())
with open("2.txt", "r") as f:
s2 = (s for s in f.readlines() if s in s1)
with open("final.txt", "w") as f:
f.writelines(s2)
(тут мы не удаляем переводы строк, т.к. они нам нужны при выводе)1-2 млн строк - это не так много, в памяти современного компа поместится с большим запасом. Без чтения в память пересечение двух неотсортированных файлов эффективно найти нереально.
А вот если задача стоит найти пересечение двух отсортированных файлов, то она решается за линейное время. Нужно читать оба файла параллельно. И в памяти их тогда хранить не придётся, можно сразу выводить в результирующий файл.
Леонид Дорохин
А сохранение будет в final.txt?
Похожие вопросы
- Создаю программу. Нужно считать данные
- Нужно из двух .txt файлов выделить в два .txt файла повторы и уникальные
- Как объединить 6000 txt файлов в один и выгрузить с него ссылки?
- Дан текстовый файл input.txt...
- Python перестал распознавать русский в TXT файлах, что делать?
- Есть люди отлично знающие python? Помогите распарсить txt файлик.
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Алгоритмы и структуры данных. Нужно ли все понимать? Просто там такие математические действия.
- Ввод данных input(), int()
- Как подключить файл к другому файлу в питоне