Как я могу вставлять изображения, используя path to python-docx, итеративно добавлять изображения в шаблон .DOCX и сохранять каждый уникальный .DOCX?

#python #qr-code #python-docx

#python #qr-код #python-docx

Вопрос:

Я пытаюсь решить проблему с использованием Python, включая путь к каталогу файлов изображений и библиотеку python-docx.

У меня есть каталог, содержащий 100 файлов * .png, которые являются уникальными QR-кодами, созданными из отдельного процесса:

   codes_dir
    ├── qr_code001.png
    ├── qr_code002.png
    ├── qr_code003.png
    ├── qr_code004.png
    ├── qr_code005.png
    etc
  

Мне нужно встроить каждый QR-код * .png в стандартный файл .DOCX, а затем сохранить уникальные результаты. Шаблон .DOCX выглядит следующим образом:

введите описание изображения здесь

После факта каждый файл должен выглядеть следующим образом:

введите описание изображения здесь

А затем в отдельном каталоге у меня будет список уникальных.Файлы DOCX, которые соответствуют базовым именам каждого уникального QR-кода, например:

   codes_dir
    ├── qr_code001.png
    ├── qr_code002.png
    ├── qr_code003.png
    ├── qr_code004.png
    ├── qr_code005.png
    etc
   docx_dir
    ├── qr_code001.docx
    ├── qr_code002.docx
    ├── qr_code003.docx
    ├── qr_code004.docx
    ├── qr_code005.docx
    etc
  

Вот что я пробовал, работая изнутри docx_dir :

 from docx import Document
import glob
import os

def embed_qr_code():
    doc = Document("path/to/template.docx")
    qr_images = glob.glob("path/to/codes_dir")
    for image in qr_images:
        image_name = os.path.basename(image)
        doc.add_picture(image)
        doc.save(f"{image_name}.docx")

embed_qr_code()
  

В итоге у меня получается 100 файлов, которые выглядят следующим образом:

    docx_dir
    ├── qr_code001.png.docx
    ├── qr_code002.png.docx
    ├── qr_code003.png.docx
    ├── qr_code004.png.docx
    ├── qr_code005.png.docx
    etc
  

Кажется, работает, но вместо одного изображения QR-кода на одно.Файл DOCX, .Файлы DOCX содержат… ну, не один QR-код. Я не понимаю, как это может быть, когда каждое имя файла QR-изображения уникально.
введите описание изображения здесь

Можете ли вы помочь мне понять, что я делаю неправильно? Спасибо за любую помощь, которую вы можете предоставить.

Комментарии:

1. Все ли документы заканчиваются 3 QR-кодами вместо 1?

2. @AMC Привет, спасибо, на самом деле число варьируется, я не могу точно определить, есть ли шаблон, диапазон, кажется, от 3 до 50 .

Ответ №1:

Вы должны открыть новый файл для каждого изображения. Итак, переместите свой Document() вызов вниз внутри цикла следующим образом:

 def embed_qr_code():
    qr_images = glob.glob("path/to/codes_dir")
    for image in qr_images:
        image_name = os.path.basename(image)
        doc = Document("path/to/template.docx")
        doc.add_picture(image)
        doc.save(f"{image_name}.docx")
  

В противном doc случае изображения накапливаются по мере их добавления, поэтому первый сохраненный документ получает один, второй получает один плюс другой, и так далее, например, 1, 2, 3, … изображения для всех возможных изображений, которые есть qr_images .