如何从类似字节的对象中知道文件格式?
How to know format of file from a bytes-like object?
我使用的ORACLE数据库以BLOB类型存储PDF或ZIP格式的文件。我想保存这些文件。但是,我不知道如何识别什么时候是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?
您可以尝试通过检查您读取的字节来检查文件签名。
据此: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”
因此您可以检查前几个字节并检查它们是否与文件签名相同 - 并据此确定文件类型。
我使用的ORACLE数据库以BLOB类型存储PDF或ZIP格式的文件。我想保存这些文件。但是,我不知道如何识别什么时候是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?
您可以尝试通过检查您读取的字节来检查文件签名。
据此: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”
因此您可以检查前几个字节并检查它们是否与文件签名相同 - 并据此确定文件类型。