使用python从数据库中检索文件

时间:2017-03-29 05:56:12

标签: python python-2.7 pandas pdf dataframe

我在数据库中有一个列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)

2 个答案:

答案 0 :(得分:2)

一切都很好。您看到的是相同内容的不同表示。

0x255044 ...是第一个字节的十六进制表示。如果你在ASCII表中查找,

  • 0x25 ='%'
  • 0x50 =' P'
  • 0x44 =' D'

等等。另一个文本是.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