число страниц в файле PDF

Вдохновленный некоторыми ответами выше, которые работают с базовыми пакетами Python, я сравнил производительность нескольких (используя Python 3.7.3):

Метод 1: ast

import ast
list(map(str.strip, ast.literal_eval(u'[ "A","B","C" , " D"]')))
# ['A', 'B', 'C', 'D']

import timeit
timeit.timeit(stmt="list(map(str.strip, ast.literal_eval(u'[ \"A\",\"B\",\"C\" , \" D\"]')))", setup='import ast', number=100000)
# 1.292875313000195

Метод 2: JSON

import json
list(map(str.strip, json.loads(u'[ "A","B","C" , " D"]')))
# ['A', 'B', 'C', 'D']

import timeit
timeit.timeit(stmt="list(map(str.strip, json.loads(u'[ \"A\",\"B\",\"C\" , \" D\"]')))", setup='import json', number=100000)
# 0.27833264000014424

Метод 3: нет импорта

list(map(str.strip, u'[ "A","B","C" , " D"]'.strip('][').replace('"', '').split(',')))
# ['A', 'B', 'C', 'D']

import timeit
timeit.timeit(stmt="list(map(str.strip, u'[ \"A\",\"B\",\"C\" , \" D\"]'.strip('][').replace('\"', '').split(',')))", number=100000)
# 0.12935059100027502

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

11
задан Julie 8 July 2009 в 13:42
поделиться

2 ответа

В PDF-файлах страницы хранятся в виде дерева. Объекты «/ Pages» могут иметь записи «/ Parent» и «/ Kids», за которыми следует «/ Count». Вы не можете суммировать записи «/ Count», потому что Kid может быть другим узлом Pages. Объект «/ Page» является листом.

Откройте PDF-файл как текстовый файл и подсчитайте, сколько раз «/ Page» (не «/ Pages») появляется в файле. В большинстве случаев это должно быть правильно.

5
ответ дан 3 December 2019 в 04:33
поделиться

На основании ответа Р. Уббена я обнаружил, что следующий код PHP дает хорошие результаты:

function count_pages($pdfname) {
  $pdftext = file_get_contents($pdfname);
  $num = preg_match_all("/\/Page\W/", $pdftext, $dummy);
  return $num;
}

\ W соответствует любому не буквенно-цифровому символу и исключает такие вещи, как / Pages , / PageMode и т. Д.

19
ответ дан 3 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: