Py学习  »  Python

用python重建sql server文件

DanielaC • 5 年前 • 1318 次点击  

我正在使用一个类似于

USER_ID varchar(50), FILE_NAME ntext, FILE_CONTENT ntext

样本数据:

USER_ID:      1
FILE_NAME:    (AttachedFiles:1)=file1.pdf
FILE_CONTENT: (AttachedFiles:1)=H4sIAAAAAAAAAOy8VXQcy7Ku….

是指通过删除“(attachedfiles:1)=”部分成功隔离文件内容字段的“内容”的正则表达式,该部分的字符串类似于:

content_str = "H4sIAAAAAAAAAOy8VXQcy7Ku22JmZmZmspiZGS2WLGa0xc…"

我的计划是用这个字符串重建文件,从数据库下载它。在我的调查过程中,我发现 this post 然后继续复制如下代码:

content_str = 'H4sIAAAAAAAAAO19B0AUR/v33...'
with open(os.path.expanduser('test.pdf'), 'wb') as f:
    f.write(base64.decodestring(content_str))

…正在获取类型错误:应为字节,如object,而不是str

进一步调查,我发现 this other post 然后就这样:

content_str = 'H4sIAAAAAAAAAO19B0AUR/v33...'
encoded = content_str.encode('ascii')
with open(os.path.expanduser('test.pdf'), 'wb') as f:
    f.write(base64.decodestring(encoded))

…作为成功创建pdf的结果。但是,当尝试打开它时,我得到一个错误,说文件已损坏。

我恳请你就如何进行提出任何建议。如果有必要的话,我甚至愿意重新考虑我提出的程序。多谢提前!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47142
 
1318 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Tomalak
Reply   •   1 楼
Tomalak    6 年前

的价值 FILE_CONTENT 是base64编码的。这意味着它是一个由64个可能的字符组成的字符串,这些字符表示原始字节。您只需要对字符串进行base64解码,并将结果字节直接写入文件。

import base64

content_str = "H4sIAAAAAAAAAOy8VXQcy7Ku22JmZmZmspiZGS2WLGa0xc=="

with open(os.path.expanduser('test.pdf'), 'wb') as fp:
    fp.write(base64.b64decode(content_str))

Base64序列 "H4sI" 在内容字符串的开头转换为字节 0x1f 我是说, 0x8b 我是说, 0x08 .这些字节通常不在pdf文件的开头,而是表示gzip压缩数据流。有可能pdf阅读器无法理解这一点。

我不确定gzip压缩是否是pdf文件格式的有效部分,但它是web通信的有效部分,所以可能文件流是为了传输/下载而压缩的,在将其写入数据库之前没有解压缩。

如果PDF阅读器不接受数据,请在将其保存到文件之前将其解压缩:

import gzip

# ...

with open(os.path.expanduser('test.pdf'), 'wb') as fp:
    fp.write(gzip.decompress(base64.b64decode(content_str)))