Как объединить несколько файлов docx в один с помощью Python

Вопрос или проблема

Я объединил несколько текстовых файлов в один текстовый файл с помощью простого кода:

with open("Combined_file.txt", 'w') as f1:
    for indx1, fil1 in enumerate(files_to_combine):
        with open(files_to_combine[indx1], 'r') as f2:
            for line1 in f2:
                f1.write(line1)
            f1.write("\n")

files_to_combine – это список, содержащий файлы для объединения в один файл Combined_file.txt. Я хочу объединить файлы MS Word .docx аналогично вышеприведенному и посмотрел на этот ответ https://stackoverflow.com/a/48925828 с использованием модуля python-docx. Но я не смог понять, как открыть и сохранить файл docx в верхнем for цикле приведенного выше кода, так как конструкция with open здесь не сработает. Также, если исходный файл docx содержит изображение, можно ли его скопировать с помощью приведенного выше кода и кода из ответа?

Ответ или решение

Для объединения нескольких файлов формата .docx в один файл с помощью Python, вы действительно можете использовать библиотеку python-docx. Эта библиотека позволяет вам открывать, редактировать и сохранять документы в формате Word.

Установка библиотеки

Если у вас ещё не установлена библиотека python-docx, вы можете установить её с помощью pip. В командной строке выполните следующую команду:

pip install python-docx

Основной код для объединения файлов .docx

Ниже представлен пример кода, который демонстрирует, как объединить несколько файлов .docx в один. Этот код также учитывает возможное наличие изображений в исходных файлах.

from docx import Document
import os

# Список файлов, которые нужно объединить
files_to_combine = ['file1.docx', 'file2.docx', 'file3.docx']
# Имя результирующего файла
output_file = 'Combined_file.docx'

# Создание нового документа
combined_doc = Document()

for file in files_to_combine:
    # Открытие каждого файла .docx
    doc = Document(file)

    # Копирование содержимого текущего документа
    for element in doc.element.body:
        combined_doc.element.body.append(element)

# Сохранение объединенного документа
combined_doc.save(output_file)

Объяснение кода

  1. Импорт библиотеки: Мы импортируем Document из библиотеки python-docx, которая позволяет работать с файлами Word.

  2. Список файлов: files_to_combine – это список с именами файлов .docx, которые вы хотите объединить.

  3. Создание нового документа: С помощью Document() мы создаём новый, пустой документ.

  4. Цикл по файлам: Внутри цикла мы открываем каждый файл из списка и копируем его содержимое. Для этого мы перебираем все элементы тела документа (doc.element.body) и добавляем их в новый документ (combined_doc).

  5. Сохранение результата: После того, как все файлы были объединены, мы сохраняем новый документ под именем Combined_file.docx.

Копирование изображений

Если исходный .docx файл содержит изображения, они будут автоматически скопированы в новый документ, поскольку мы работаем с элементами тела документа, которые включают текст и изображения. python-docx обрабатывает это за вас, так что вам не нужно писать дополнительный код для этой задачи.

Заключение

Этот подход позволяет эффективно объединять множество .docx файлов в один, при этом сохраняя все стили, изображения и форматирование. Он достаточно прост в реализации и предоставляет хорошую гибкость для обработки файлов Word с помощью Python. Убедитесь, что вы проверяете целостность данных в новом объединённом файле, особенно если исходные файлы сильно отличаются по стилю или содержанию.

Оцените материал
Добавить комментарий

Капча загружается...