2017-02-21 5 views
0

Я новичок в python, и я пытаюсь учиться на книгах и в Интернете.Ошибка создания Python PDF из рекурсивных каталогов

У меня около 250 подпапок с jpg, и я пытаюсь сделать PDF-файл для каждой папки.

Папки как этот

c:\img_sets\001 
c:\img_sets\002 
. 
. 
c:\img_sets\247 

Я хочу, чтобы PDF как этот

c:\img_sets\001.pdf 
c:\img_sets\002.pdf 
. 
. 
c:\img_sets\247.pdf 

я запустить скрипт из C: \ img_sets (окна 10 и питона 3.6)

Здесь вы «код», просто добавил 2 распечатки с файлом списка, просто для управления.

from fpdf import FPDF 
import os 
pdf = FPDF() 
rootDir = '.' 
for root, dirs, files in os.walk(rootDir): 
    for namedir in dirs: 
     imagelist = [name for name in os.listdir(namedir) if name.endswith(".jpg")] 
     for image in imagelist: 
      print(namedir + "\\" + image) 
      pdf.add_page() 
      pdf.image(namedir + "\\" + image,0,0,210,297) 
     print(namedir + ".pdf") 
     pdf.output(namedir + ".pdf", "F") 

Это создает первый, но второй показывает мне эту ошибку:

Traceback (most recent call last): 
    File "c:\Python\Python36-32\jpg2pdf_v2.py", line 13, in <module> 
pdf.output(namedir + ".pdf", "F") 
    File "C:\Python\Python36-32\lib\site-packages\fpdf\fpdf.py", line 1065, in output 
    self.close() 
    File "C:\Python\Python36-32\lib\site-packages\fpdf\fpdf.py", line 246, in close 
    self._enddoc() 
    File "C:\Python\Python36-32\lib\site-packages\fpdf\fpdf.py", line 1637, in _enddoc 
    self._putresources() 
    File "C:\Python\Python36-32\lib\site-packages\fpdf\fpdf.py", line 1585, in _putresources 
    self._putimages() 
    File "C:\Python\Python36-32\lib\site-packages\fpdf\fpdf.py", line 1515, in _putimages 
    del info['data'] 
KeyError: 'data' 

Вся помощь будет оценена.

ответ

0

обнаружена ошибка. pdf = FPDF() был неправильным, был вне цикла.

import fpdf 
import os 
rootDir = '.' 
for root, dirs, files in os.walk(rootDir): 
    for dir in dirs: 
     print(os.path.join(root, dir)) 
     imagelist = [name for name in os.listdir(os.path.join(root, dir)) if name.endswith(".jpg")] 
     print(imagelist) 
     pdf = fpdf.FPDF() 
     for image in imagelist: 
      pdf.add_page() 
      pdf.image(rootDir + dir + "\\" + image, 0, 0, 210, 297) 
     pdf.output(rootDir + dir + ".pdf", "F")