社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用python重建sql server文件

DanielaC • 5 年前 • 1311 次点击  

我正在使用一个类似于

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
 
1311 次点击  
文章 [ 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)))