Как узнать формат файла из байтовоподобного объекта? - PullRequest
0 голосов
/ 10 октября 2019

База данных ORACLE, которую я использую, хранит файлы в формате PDF или ZIP в типе BLOB. Я хочу сохранить эти файлы. Тем не менее, я не знаю, как распознать, когда это PDF, а когда это ZIP? Можно ли проверить, какой формат файла BLOB хранит внутри?

Ниже приведен простой метод write_file для сохранения файла:

def write_file(data, filename):
    with open(filename, 'wb') as f:
        f.write(data)

Здесь я выбираю соответствующий BLOB с помощью курсора и использую метод write_file для сохранения файла:

firstRow = cur.fetchone()
write_file(firstRow[0].read(), "blah.zip")

Как распознать, когда это будет zip, а когда будет pdf?

1 Ответ

1 голос
/ 10 октября 2019

Вы можете попробовать проверить подписи файлов, проверив прочитанные вами байты.

В соответствии с этим: https://en.wikipedia.org/wiki/List_of_file_signatures

1) ZIP-файл начинается с "50 4B 03 04" или "50 4B 05 06" или "50 4B 07 08"

2) PDF-файл начинается с: «25 50 44 46 2d»

Таким образом, вы можете проверить первые несколько байтов и проверить, равны ли они сигнатурам файла - и выяснить файлтип на основе этого.

...