【问题标题】:Retrieve file from database using python使用python从数据库中检索文件
【发布时间】:2017-03-29 05:56:11
【问题描述】:

我在存储 pdf、zip 和 docx 文件的数据库中有一个列 FileContent(数据类型 image)。

FileContent 列在数据库中具有以下值:0x2550444...

我使用 python 将 SQL 表读入 DF,FileContent 列中的值包含奇怪的文本而不是 0x2550444...

%PDF-1.7\n\n4 0 obj\n(Identity)\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ž£¥åó_{óÒÕ¿™€õ®ŠÒº²‹ U3¯ý!E¤ª¼¢rÁ«|^{w!.......................

有没有办法使用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)

【问题讨论】:

  • 请告诉我们您使用的是什么数据库 ORM。
  • @meyer9 你好,我现在正在使用模块:pymssql 来连接 MSSQL 数据库。
  • 然后请发布一些代码。你能从数据库中检索文本吗?
  • 嗨@meyer9 是的,我设法在python 中检索到上面显示在黄色框中的文本。已经发布了我的代码。

标签: python python-2.7 pandas pdf dataframe


【解决方案1】:

一切都很好。你看到的是相同内容的不同表现形式。

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

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

等等。另一个文本是 .pdf 在文本编辑器中的样子。 “流”之后的乱码是pdf中的zip压缩内容。

只需将整个流写入 .pdf 文件(使用二进制模式!)并尝试在 Acrobat Reader 中打开。

with open('temp.pdf', 'wb') as outfile:
    outfile.write(pdf_content_from_database)

应该这样做。

【讨论】:

    【解决方案2】:

    '%PDF-1.7\n 的 ASCII 码为 '0x25''0x50''0x44''0x46''0x2d''0x31''0x2e''0x37''0xa'

    所以0x255044462d302e370a 只是该字符串的 ASCII 表示。 '%PDF-1.7\n 是 pdf 文件的序言。这意味着您已经从数据库中正确提取了 PDF 文件的内容。您只需将其保存到扩展名为 .pdf 的文件中即可使用。

    因此假设上面的文本包含在变量fileContent 中,其转换为pdf文件只是:

    with open('file.pdf', 'wb') as fd:   # binary mode
        fd.write(fileContent)
    

    【讨论】:

    • 嗨@Serge Ballesta,感谢您的启发。我运行上面的代码,得到了以下错误:fd.write(df)TypeError: argument 1 must be convertible to a buffer, not DataFrame代码:with open(r'C:\Users\XXX\Desktop\file.pdf', 'wb') as fd: # binary modefd.write(df)注意:df只包含FileContent列。
    • @Grqm.:我远非数据帧专家。您必须设法将字段的内容作为字节字符串获取。我的代码确实假定 fileContent 是 Python 字符串...
    猜你喜欢
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多