Вдохновленный некоторыми ответами выше, которые работают с базовыми пакетами 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, я обычно оцениваю читаемость немного выше более производительный вариант, но, как обычно, зависит.
В PDF-файлах страницы хранятся в виде дерева. Объекты «/ Pages» могут иметь записи «/ Parent» и «/ Kids», за которыми следует «/ Count». Вы не можете суммировать записи «/ Count», потому что Kid может быть другим узлом Pages. Объект «/ Page» является листом.
Откройте PDF-файл как текстовый файл и подсчитайте, сколько раз «/ Page» (не «/ Pages») появляется в файле. В большинстве случаев это должно быть правильно.
На основании ответа Р. Уббена я обнаружил, что следующий код PHP дает хорошие результаты:
function count_pages($pdfname) {
$pdftext = file_get_contents($pdfname);
$num = preg_match_all("/\/Page\W/", $pdftext, $dummy);
return $num;
}
\ W
соответствует любому не буквенно-цифровому символу и исключает такие вещи, как / Pages
, / PageMode
и т. Д.