Python Объединение нескольких PDF-файлов в подкаталогах - PullRequest
0 голосов
/ 26 мая 2020

У меня есть папка (называемая «папка данных»), которая содержит вложенные папки (местоположения), в каждой из которых есть несколько файлов PDF. Теперь для каждой подпапки я хочу сделать 2 вещи:

  • 1) Я хочу сохранить только первую страницу каждого pdf
  • 2) Следовательно, я хочу объединить все эти первые страницы в 1 pdf под названием "merged.pdf".

Поэтому я написал следующий сценарий:

datafolder = r'C:\Users\xxx\folder'

import os
import sys
from PyPDF2 import PdfFileMerger, PdfFileWriter,  PdfFileReader


output = PdfFileWriter()
merger = PdfFileMerger()
subdirectory = [] 
for subdir, dirs, files in os.walk(datafolder):
    for sub_dir in dirs:
        subdir_to_open = datafolder + "\\" + sub_dir
        subdirectory.append(subdir_to_open) # Save path name of each subfolder

for j in range(len(subdirectory)): # for each subfolder 
    subdir_open = str(subdirectory[j]) # Make string to open subfolder

    for pdf in os.listdir(subdir_open): # For each report in subdirectory...

        infile = PdfFileReader((pdf), 'rb')
        p = infile.getPage(0) # Keep the first page, remove the last empty page 
        output.addPage(p)
        print(j,pdf) # Print subdirectory and pdf file to check
        with open(subdir_open+'\\'+'merged.pdf', 'wb') as f:
            output.write(f)
            f.close()

печатая j, pdf, проверяю, все ли в порядке: возвращается:

1 C:\Users\xxx\folder\Location1\pdf01.pdf
1 C:\Users\xxx\folder\Location1\pdf02.pdf
2 C:\Users\xxx\folder\Location2\01.pdf
2 C:\Users\xxx\folder\Location2\02.pdf
3 C:\Users\xxx\folder\Location3\01.pdf
3 C:\Users\xxx\folder\Location3\02.pdf
3 C:\Users\xxx\folder\Location3\03.pdf

что означает, что он действительно, кажется, выбирает правильные PDF-файлы в моей секунде для l oop. Однако файл merged.pdf, созданный в каждой подпапке, также содержит файлы PDF из других мест. Так, например, в папке C: \ Users \ xxx \ folder \ Location2 файл "merged.pdf" содержит первые страницы pdf01 и pdf02 местоположения 1. Почему-то кажется, что

p = infile.getPage(0)

добавляет новую страницу для всех pdf-файлов, независимо от того, в какой подкаталоге я нахожусь. Но я хотел бы обновлять sh ее каждый раз, когда go добавляю новую подпапку. Есть какой-либо способ сделать это? Или в моем скрипте может быть другая проблема?

...