Объединение текстовых файлов в Python: быстрый и элегантный способ
Быстрый ответ
Для объединения текстовых файлов в Python применяется функция open()
, совмещённая с циклом. Приведём пример кода:
with open('output.txt', 'w') as outfile:
for f in ['file1.txt', 'file2.txt']:
with open(f, 'r') as infile:
outfile.write(infile.read())
Этот код сливает воедино содержимое файлов file1.txt
и file2.txt
в единый файл output.txt
.
Построчное чтение больших файлов
Работая с большими файлами, предпочтительнее обрабатывать их построчно, чтобы избежать перегрузки оперативной памяти компьютера:
with open('output.txt', 'w') as outfile:
for f in ['file1.txt', 'file2.txt']:
with open(f, 'r') as infile:
for line in infile:
outfile.write(line)
Такой подход позволяет оптимально обрабатывать большие текстовые файлы, без превышения задействования оперативной памяти.
Изящество применения itertools
Использование itertools.chain.from_iterable
придаёт элегантность в работе с несколькими файлами:
import itertools
files = ['file1.txt', 'file2.txt']
with open('output.txt', 'w') as outfile:
outfile.writelines(itertools.chain.from_iterable(map(open, files)))
Если данные не текстовые, стоит использовать бинарный режим для предотвращения повреждения информации.
Элегантность fileinput
С помощью fileinput.input()
возможно эффективно оперировать несколькими файлами как одним непрерывным потоком данных:
import fileinput
with open('output.txt', 'w') as outfile:
for line in fileinput.input(['file1.txt', 'file2.txt']):
outfile.write(line)
Этот метод упрощает взаимодействие с файлами и делает код более лаконичным.
Поиск файлов по шаблону с использованием glob
Для поиска файлов соответствующих определённому шаблону применяется модуль glob:
import glob
file_pattern = '*.txt'
file_list = glob.glob(file_pattern)
with open('output.txt', 'w') as outfile:
for file_name in file_list:
with open(file_name, 'r') as infile:
outfile.write(infile.read())
Такой подход упрощает поиск и отбор нужных файлов.
Визуализация
Представте процесс слияния файлов как сложение блинов в стопку:
# 📄🥞 Магия Python: складываем блины-файлы в стопку
with open('breakfast_stack.txt', 'w') as stack:
for pancake in ['file1.txt', 'file2.txt', 'file3.txt']:
with open(pancake, 'r') as ingredient:
stack.write(ingredient.read())
Так создаётся единая стопка из отдельных файлов-блинов.
Чтение и запись больших файлов по частям
Для очень больших файлов рекомендуется их обрабатывать по фрагментам:
chunk_size = 1024
with open('output.txt', 'wb') as outfile:
for f in ['bigfile1.txt', 'bigfile2.txt']:
with open(f, 'rb') as infile:
while chunk := infile.read(chunk_size):
outfile.write(chunk)
Эффективное соединение файлов с использованием shutil
Для оптимизации процесса слияния файлов рекомендуется применять модуль shutil
:
import shutil
with open('output.txt', 'wb') as outfile:
for f in ['file1.txt', 'file2.txt']:
with open(f, 'rb') as infile:
shutil.copyfileobj(infile, outfile)
Полезные материалы
- 7. Ввод и вывод — Документация Python 3.12.2 — руководство Python по взаимодействию с файловой системой.
- Чтение и запись файлов в Python (Руководство) – Real Python — подробное руководство по операциям ввода-вывода файлов в Python.
- Программа Python для объединения двух файлов в третий – GeeksforGeeks — детальное описание процедуры слияния файлов.
- Автоматизируем скучную работу с Python — наглядное пособие по манипуляциям с файлами в Python.
- Python – Ввод/вывод файлов — конспект основ чтения/записи файлов в Python.