Загрузка данных


import csv
from copy import deepcopy

from docx import Document
from docx.enum.text import WD_BREAK


def replace_text(doc, data):
    for p in doc.paragraphs:
        for k, v in data.items():
            if "{" + k + "}" in p.text:
                for r in p.runs:
                    r.text = r.text.replace("{" + k + "}", str(v))

    for t in doc.tables:
        for row in t.rows:
            for cell in row.cells:
                replace_text(cell, data)


with open("books.csv", encoding="utf-8") as f:
    a = csv.DictReader(f, delimiter=";")
    b = [x for x in a if int(x["Copies"]) > 1]

c = Document("book_card.docx")
d = Document("book_card.docx")

for e in list(d.element.body):
    if e.tag.endswith("sectPr"):
        continue
    d.element.body.remove(e)

for j, x in enumerate(b):
    e = Document("book_card.docx")
    replace_text(e, x)

    for k in e.element.body:
        if not k.tag.endswith("sectPr"):
            d.element.body.append(deepcopy(k))

    if j < len(b) - 1:
        d.add_paragraph().add_run().add_break(WD_BREAK.PAGE)

d.save("library.docx")