В настоящее время я работаю над проектом, который возьмет сколько угодно папок и объединит содержимое каждой папки в pdf. Это означает, что каждая папка будет выводить один PDF. Мне удалось выяснить, как объединить файлы, с которыми я работаю, в отдельный PDF-файл, используя ReportLab. Теперь мне нужно, чтобы он перебрал каждую папку и создал PDF. Пока что я могу использовать os.walk для запуска моих тестовых каталогов, но он не будет запускать скрипт pdf.
import glob
import os
import re
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Image, PageBreak
from reportlab.lib.units import inch
list_of_files = ["C:\\foo_1", "C:\\foo_2"]
os.chdir("C:\\foo")
for root, dirs, files in os.walk(".", topdown = False):
for name in files:
print(os.path.join(root, name)) #used to see where os.walk is working
def sorted_nicely( l ):
"""
/2035771/kak-otsortirovat-bukvenno-tsifrovoi-nabor-v-python
Sort the given iterable in the way that humans expect.
"""
convert = lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(l, key = alphanum_key)
def collect_issue(fname):
if not fname.endswith(".pdf"):
fname += ".pdf"
doc = SimpleDocTemplate(fname,pagesize=letter,
rightMargin=0,leftMargin=0,
topMargin=0,bottomMargin=0)
width = 7.5*inch
height = 9.5*inch
picture_file_names = sorted_nicely(glob.glob("*.jp2"))
contents = []
for pic_fname in picture_file_names:
im = Image(pic_fname, width=width, height=height)
contents.append(im)
contents.append(PageBreak())
doc.build(contents)
if __name__ == "__main__":
collect_issue("test")
Я специально обращаюсь за помощью с помощью os.walk, чтобы скрипт pdf запускался через столько папок, сколько мне нужно. Я не совсем уверен, что именно заставляет это не работать также. Для справки, большая часть этого кода основана на этом скрипте .