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")