#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
.