Объединение текстовых файлов в Python: быстрый и элегантный способ

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для объединения текстовых файлов в Python применяется функция open(), совмещённая с циклом. Приведём пример кода:

Python
Скопировать код
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.

Кинга Идем в IT: пошаговый план для смены профессии

Построчное чтение больших файлов

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

Python
Скопировать код
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 придаёт элегантность в работе с несколькими файлами:

Python
Скопировать код
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() возможно эффективно оперировать несколькими файлами как одним непрерывным потоком данных:

Python
Скопировать код
import fileinput

with open('output.txt', 'w') as outfile:
    for line in fileinput.input(['file1.txt', 'file2.txt']):
        outfile.write(line)

Этот метод упрощает взаимодействие с файлами и делает код более лаконичным.

Поиск файлов по шаблону с использованием glob

Для поиска файлов соответствующих определённому шаблону применяется модуль glob:

Python
Скопировать код
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
Скопировать код
# 📄🥞 Магия 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())

Так создаётся единая стопка из отдельных файлов-блинов.

Чтение и запись больших файлов по частям

Для очень больших файлов рекомендуется их обрабатывать по фрагментам:

Python
Скопировать код
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:

Python
Скопировать код
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)

Полезные материалы

  1. 7. Ввод и вывод — Документация Python 3.12.2руководство Python по взаимодействию с файловой системой.
  2. Чтение и запись файлов в Python (Руководство) – Real Python — подробное руководство по операциям ввода-вывода файлов в Python.
  3. Программа Python для объединения двух файлов в третий – GeeksforGeeks — детальное описание процедуры слияния файлов.
  4. Автоматизируем скучную работу с Python — наглядное пособие по манипуляциям с файлами в Python.
  5. Python – Ввод/вывод файлов — конспект основ чтения/записи файлов в Python.