Python скрипт для разделения многостраничного PDF-файла работает с некоторыми PDF-файлами, а не с другими - PullRequest
1 голос
/ 29 мая 2020

Я использую следующий сценарий в Windows для разделения многостраничных PDF-файлов. Скрипт выглядит так ...

from PyPDF2 import PdfFileWriter, PdfFileReader
inputpdf = PdfFileReader(open("*pathToPDF**”, "rb"))

for i in range(inputpdf.numPages):
    output = PdfFileWriter()
    output.addPage(inputpdf.getPage(i))
    with open("document-page%s.pdf" % i, "wb") as outputStream:
        output.write(outputStream)

Я заменяю pathToPDF на путь к многостраничному PDF-файлу, который нужно разделить на лету.

Я понял отлично работает с девятистраничным PDF-файлом размером 91 КБ, но когда я попробовал его с 232-страничным PDF-файлом 1,62 ГБ, он выдает следующую ошибку ...

Traceback (последний вызов последним): Файл «C: \ MySplitFolder \ splitPDF windows .py », строка 3, в inputpdf = PdfFileReader (open (« C: \ MySplitFolder \ 1973PB1PhyOfficeParkingBldg_CD.pdf »,« rb »)) OSError: [Errno 22] Invalid argument: [Errno 22] Invalid argument: 'C: \ MySplitFolder \ x01973PB1PhyOfficeParkingBldg_CD.pdf'

Вот код строки 3 небольшого pdf ...

inputpdf = PdfFileReader(open("C:\MySplitFolder\BestInCategory_JR 2.pdf", "rb"))

Вот код строки 3 большой pdf ...

inputpdf = PdfFileReader(open("C:\MySplitFolder\1973PB1PhyOfficeParkingBldg_CD.pdf", "rb"))

Имя документа - единственное различие между двумя скриптами при выполнении. Хотя ошибка говорит о недопустимом аргументе, я не вижу никакой разницы между двумя строками, кроме имени документа. Проблема с размером файла?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 29 мая 2020

Указанный вами путь - C:\MySplitFolder\1973PB1PhyOfficeParking, но в сообщении об ошибке указан путь C:\MySplitFolder\x01973PB1PhyOfficeParking. Обратите внимание, что дополнительный x0 после второго \!

Python предполагает, что \ является escape-символом и обрабатывает \197 в качестве escape-последовательности, заменив ее эквивалентным символом ASCII.

Чтобы исправить это, скажите python трактовать путь как необработанную строку , добавив к нему префикс r:

inputpdf = PdfFileReader(open(r"C:\MySplitFolder\1973PB1PhyOfficeParkingBldg_CD.pdf", "rb"))

Причина, по которой первый файл сработал, состоит в том, что в python «все нераспознанные escape-последовательности остаются в строке без изменений». Таким образом, и \M, и \B не распознаются и остаются неизменными. Следовательно, в результате получается строка пути, которая случайно оказывается правильной!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...