我在数据库中有一个列FileContent
(数据类型image
),用于存储pdf,zip和docx文件。
FileContent
列在数据库中具有以下值:0x2550444...
我使用python将SQL表读入DF,而FileContent
列中的值包含奇怪的文本而不是0x2550444...
:
%PDF-1.7 \ n \ n4 0 obj \ n(身份)\ nendobj \ n5 0 obj(Adobe)endobj8 0 obj>流xœì½x\ÅÕ7>sïÝÞ«¶hμ»ZíJòªKV³,Õb['eK²eKVqaÝmlÜ0Íу〜NBÁ$ÙÆ¢>¼| ...'〜4JpH€“éæÎcxóþŸïý¾G#Ÿ=¿™;3wæÌ™3gæÞ]#Œ²Ã‡€:Ê>fWÕþ °ã~+〜Bž£¥åó_{óÒÕ¿™€õ®ŠÒº²
有没有办法使用python
检索文件或将上面的文本转换为文件(例如PDF)?
非常感谢您的意见。谢谢。
我的最终目标是:
- 从FileContent
列中检索文件,稍后在文件中提取文本。
代码:
import pymssql
conn = pymssql.connect(server="",user="",password="",database="")
stmt = "SELECT FileContent FROM [tablename]"
df = pd.read_sql(stmt,conn)
df.head()
print(df)
答案 0 :(得分:2)
一切都很好。您看到的是相同内容的不同表示。
0x255044 ...是第一个字节的十六进制表示。如果你在ASCII表中查找,
等等。另一个文本是.pdf在文本编辑器中的样子。 " stream"之后出现乱码。是pdf中的压缩压缩内容。
只需将整个流写入.pdf文件(使用二进制模式!)并尝试在Acrobat Reader中打开。
with open('temp.pdf', 'wb') as outfile:
outfile.write(pdf_content_from_database)
应该这样做。
答案 1 :(得分:1)
'%PDF-1.7\n
的ASCII代码为'0x25'
,'0x50'
,'0x44'
,'0x46'
,'0x2d'
,'0x31'
,{{ 1}},'0x2e'
,'0x37'
所以'0xa'
只是该字符串的ASCII表示。 0x255044462d302e370a
是pdf文件的序言。这意味着您已从数据库中正确提取了PDF文件的内容。您只需将其保存到扩展名为.pdf的文件即可使用它。
因此,假设上述文本包含在变量'%PDF-1.7\n
中,则转换为pdf文件只是:
fileContent