парсинг даты метаданных pdf не работает для всех pdf - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь получить дату модификации для нескольких 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)) 

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

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

b'D: 20161029124239 ', 2016-10-29 12: 42: 39

b "D: 20160727173724 + 05'30 '", 2016-07-27 17: 37: 24

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

b'D: 20190218122459 ', 2019-02-18 12: 24: 59

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

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

b "D: 20150317171945 + 05'30 '", 2015-03-17 17: 19: 45

b "D: 20140405150714 + 01'00 '", 2014-04-05 15: 07: 14

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

b'D: 20160523204913 ', 2016-05-23 20: 49: 13

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

b "D: 20150923145114 + 05'30 '", 2015-09-23 14:51:14 b "D: 20150703193510 + 05'30 '", 2015-07-03 19: 35: 10

b "D: 20170907220317 + 16'33 '", 2017-09-07 22: 03: 17

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

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

enter image description here

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

1 Ответ

0 голосов
/ 13 марта 2019

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

D:20160407192544-12'00'

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

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

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

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