使用python从数据库检索文件
我在数据库中有一列使用python从数据库检索文件,python,python-2.7,pandas,pdf,dataframe,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>stream xœì½xÕ7>sèhµ»ZíJòKV³,bèkèeKVqaèmlènèbèn
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>stream xœì½xÕ7>sèhµ»ZíJòKV³,bèkèeKVqaèmlènèbènènè253; G™;3wæÌ™第三代移动通信(3g)技术(3g)技术(3g)技术(3g)技术(3g)技术(3g)技术(3g)技术(3g)™õõõÒèU3ý!Eý¼、rÁ«w
有没有办法使用python
检索文件或将上面的文本转换成文件(例如PDF)
谢谢你的意见,谢谢
我的最终目标是:
-从列FileContent
中检索文件,然后提取文件中的文本
代码:
一切都很好。你看到的是相同内容的不同表示 0x255044…是第一个字节的十六进制表示形式。如果在ASCII表中查找
- 0x25=“%”
- 0x50='P'
- 0x44='D'
with open('temp.pdf', 'wb') as outfile:
outfile.write(pdf_content_from_database)
应该可以。一切正常。您看到的是同一内容的不同表示 0x255044…是第一个字节的十六进制表示形式。如果在ASCII表中查找
- 0x25=“%”
- 0x50='P'
- 0x44='D'
with open('temp.pdf', 'wb') as outfile:
outfile.write(pdf_content_from_database)
应该可以。用于
'%PDF-1.7\n
的ASCII码有'0x25'
,'0x50'
,'0x44'
,'0x46'
,'0x2d'
,'0x31'
,'0x2e'
,'0x37'
,'0xa'
因此,0x25504462d302e370a
只是该字符串的ASCII表示形式。而'%PDF-1.7\n
是PDF文件的前导。这意味着您已经从数据库中正确提取了PDF文件的内容。您只需将其保存到扩展名为.PDF的文件中即可使用它
因此,假设上面的文本包含在变量fileContent
中,其转换为pdf文件的过程如下:
with open('file.pdf', 'wb') as fd: # binary mode
fd.write(fileContent)
'%PDF-1.7\n
的ASCII码有'0x25'
,'0x50'
,'0x44'
,'0x46'
,'0x2d'
,'0x31'
,'0x2e'
,'0x37'
,'0xa'
因此,0x25504462d302e370a
只是该字符串的ASCII表示形式。而'%PDF-1.7\n
是PDF文件的前导。这意味着您已经从数据库中正确提取了PDF文件的内容。您只需将其保存到扩展名为.PDF的文件中即可使用它
因此,假设上面的文本包含在变量fileContent
中,其转换为pdf文件的过程如下:
with open('file.pdf', 'wb') as fd: # binary mode
fd.write(fileContent)
请让我们知道您使用的是什么数据库ORM。@meyer9您好,我正在使用模块:pymssql连接到MSSQL数据库。请发布一些代码。您能从数据库中检索文本吗?您好@meyer9是的,我设法检索了上面python黄色框中显示的文本。我已经发布了代码。请让我们知道是哪个数据库您正在使用的ORM。@meyer9您好,我正在使用模块:pymssql连接到MSSQL数据库。请发布一些代码。您能从数据库中检索文本吗?您好@meyer9是的,我成功地检索了上面python黄色框中显示的文本。我已经发布了我的代码。您好@Serge Ballesta,谢谢您的启发。我运行了上面的代码并得到以下错误:
fd.write(df)
TypeError:参数1必须可转换为缓冲区,而不是数据帧
code:打开(r'C:\Users\XXX\Desktop\file.pdf,'wb')作为fd:#二进制模式
fd.write(df)
注意:df只包含FileContent
列。@Grqm:我在数据帧方面还不是专家。您必须设法将字段的内容作为字节字符串获取。我的代码确实假设FileContent是Python字符串……您好@Serge Ballesta,谢谢您的启发。我运行了上面的代码,得到了以下错误:fd.write(df)
类型错误:参数1必须可转换为缓冲区,而不是数据帧
code:,打开时(r'C:\Users\XXX\Desktop\file.pdf',wb')作为fd:#二进制模式
fd.write(df)
注意:df仅包含FileContent
列。@Grqm:我对数据帧还不是很在行。您必须设法将字段的内容作为字节字符串获取。我的代码确实假设FileContent是Python字符串。。。