объединить несколько PDF-файлов, используя модуль PyPDF2, используя цикл for

Я новичок в python, пытаюсь объединить несколько pdf-файлов, переданных в качестве аргументов, в один pdf-файл с модулем PyPDF2, но в результате я получаю пустой pdf-файл, мой код ниже

import os,sys,PyPDF2

pdf_write_object=PyPDF2.PdfFileWriter()

for i in sys.argv[1:]:
 file_object=open(i,'rb')
 pdf_read_object=PyPDF2.PdfFileReader(file_object)
 print('processing file : '+ i + 'number of pages : ' +  str(pdf_read_object.numPages))
 for page in range(pdf_read_object.numPages):
  pdf_write_object.addPage(pdf_read_object.getPage(page))
 file_object.close() 

final_file_object=open('final_PyPDF2.pdf','wb')
pdf_write_object.write(final_file_object)
final_file_object.close()

пробовал использовать с оператором также все тот же результат

#!/usr/bin/python3

import os,sys,PyPDF2

pdf_write_object=PyPDF2.PdfFileWriter()

for i in sys.argv[1:]:
 with open(i,'rb') as file_object:
  pdf_read_object=PyPDF2.PdfFileReader(file_object)
  print('processing file : '+ i + 'number of pages : ' +  str(pdf_read_object.numPages))
  for page in range(pdf_read_object.numPages):
   pdf_write_object.addPage(pdf_read_object.getPage(page))

final_file_object=open('final_PyPDF2.pdf','wb')
pdf_write_object.write(final_file_object)
final_file_object.close()

хотя использование описанного выше метода на терминале Python для отдельных файлов работает так же хорошо, я что-то упускаю в цикле for, может кто-нибудь, пожалуйста, помогите.


person vajravelu    schedule 11.02.2018    source источник


Ответы (1)


Не открывайте файл для чтения. PdfFileReader() может сделать это автоматически, и код будет работать:

#!/usr/bin/python3

import sys
import PyPDF2

pdf_write_object = PyPDF2.PdfFileWriter()

for i in sys.argv[1:]:
    pdf_read_object = PyPDF2.PdfFileReader(i)
    print('processing file : '+ i + 'number of pages : ' +  str(pdf_read_object.numPages))
    for page in range(pdf_read_object.numPages):
        pdf_write_object.addPage(pdf_read_object.getPage(page))

final_file_object = open('final_PyPDF2.pdf', 'wb')
pdf_write_object.write(final_file_object)
final_file_object.close()
person xilopaint    schedule 15.03.2018
comment
это работает, спасибо, тем временем я решил, что удаление file_object.close() из моего первого метода также дает правильный окончательный файл, но не был уверен, как моя программа будет работать с большими PDF-файлами без исчерпания ограничений ресурсов, теперь ваш метод кажется лучше еще раз спасибо. - person vajravelu; 02.04.2018