Анализ даты метаданных PDF не работает для всех PDF-файлов

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

import os
import re
from datetime import datetime
from pdfminer3.pdfparser import PDFParser
from pdfminer3.pdfdocument import PDFDocument


# This function convers the date string to a datetime object
def get_pdf_date(pd):
    dtformat = "%Y%m%d%H%M%S"
    clean = pd.decode("utf-8").replace("D:", "").split('+')[0]
    return datetime.strptime(re.sub('[^0-9]', '', clean), dtformat)


path = "C:\\Users\\asus\\Desktop\\storage"
for file in os.listdir(path):
    try:
        fp = open(os.path.join(path, file), "rb")
        parser = PDFParser(fp)
        doc = PDFDocument(parser)
        pdf_creation_date = doc.info[0]["CreationDate"]
        print(str(pdf_creation_date) + ", " + str(get_pdf_date(pdf_creation_date)))
    except Exception as e:
        print(str(e) + " => " + str(pdf_creation_date)) 

Это вывод, который я получаю:

б"D:20151004081456+01'00'", 2015-10-04 08:14:56

б'Д:20161029124239', 2016-10-29 12:42:39

б"Д:20160727173724+05'30'", 27.07.2016 17:37:24

б"D:20170526150059+05'30'", 2017-05-26 15:00:59

б'Д:20190218122459', 2019-02-18 12:24:59

остаются непреобразованные данные: 0600 => b"D:20151017020552-06'00'"

б"D:20180302120823+00'00'", 2018-03-02 12:08:23

б"Д:20150317171945+05'30'", 2015-03-17 17:19:45

б"Д:20140405150714+01'00'", 2014-04-05 15:07:14

b'D:20190313161243Z', 2019-03-13 16:12:43

б'Д:20160523204913', 2016-05-23 20:49:13

б"D:20150716000009+05'30'", 2015-07-16 00:00:09

б"Д:20150923145114+05'30'", 23.09.2015 14:51:14 б"D:20150703193510+05'30'", 2015-07-03 19:35:10

б"Д:20170907220317+16'33'", 2017-09-07 22:03:17

остаются непреобразованные данные: 1200 => b"D:20160407192544-12'00'"

Как видите, функция синтаксического анализа, которую я использовал, работает не всегда, и это потому, что каждый PDF-файл имеет свой собственный синтаксис даты. Однако я заметил, что Foxit Reader всегда правильно получает метаданные, как показано на рисунке ниже.

Анализ даты метаданных PDF не работает для всех PDF-файлов

Поэтому мне интересно, как я могу реализовать такую ​​​​вещь

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Неудачные даты имеют знак минус для смещения часового пояса:

D:20160407192544-12'00'

Эта строка в вашем коде ожидает только знак плюс (или, неявно, без смещения часового пояса):

clean = pd.decode("utf-8").replace("D:", "").split('+')[0]

Ваш код должен обрабатывать как положительные, так и отрицательные смещения часовых поясов.

Другие вопросы по теме