@typ42: Der Quelltext liefert einen `NameError` weil `os` verwendet, aber nicht importiert wird. `os.chdir()` sollte man aber auch gar nicht verwenden. Und in neuem Code `glob` auch nicht mehr, denn diese Funktionalität steht auch über `pathlib` bereit.
`merger()` ist kein guter Funktionsname weil der keine Tätigkeit beschreibt.
`file_handles` wird definiert aber nicht verwendet. Der Name wäre auch nicht so passend, denn Dateien sind in Python Objekte und keine ”handles”.
Das ``pdf_merger.close()`` steht an einer merkwürdigen Stelle im Code.
Das `obj` in `fileobj` ist überflüssig. In Python ist *alles* was man an einen Namen binden kann ein Objekt. Das ist also keine sinnvolle Information die man in einen Namen stecken müsste. `file` reicht vollkommen aus.
Zwischenstand (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
from contextlib import closing
from pathlib import Path
from PyPDF2 import PdfFileMerger
PDF_PATH = Path(r"auf_comp")
def concatenate_pdfs(output_path, input_paths):
with closing(PdfFileMerger()) as merger:
for path in input_paths:
merger.append(str(path))
with output_path.open("wb") as file:
merger.write(file)
if __name__ == "__main__":
concatenate_pdfs(PDF_PATH / "data.pdf", sorted(PDF_PATH.glob("*.pdf")))
Wenn Du eine andere Reihenfolge haben willst als lexikographisch, dann müsstest Du eine entsprechende `key`-Funktion für das sortieren schreiben.
Oder nicht sortieren, sondern direkt die Namen in der gewünschten Reihenfolge an das `PdfFileMerger`-Objekt anhängen.