我有一些在Python2.7中工作的代码,但我现在正在尝试学习Python3并转换一些遗留脚本。我使用base64.b64decode
对包含位图图像的文件的每行进行解码(每行一个),然后StringIO.StringIO
和gzip.GzipFile
将其解压为字符串。你知道吗
我可能需要重新评估整个过程。如果在Python3中有更有效的方法来实现这一点,我愿意学习它,只要为我指明正确的方向。你知道吗
我发现io在哪里取代了StringIO
,但是当我使用io.BytesIO
时,我得到了关于文件结尾标记的错误。或者io.StringIO
给出关于尚未str
或None
的输入类型的错误。你知道吗
我尝试了几种不同的方法来将io.BytesIO
的输出转换回字符串,但不是试图掩盖我遇到的每一个错误,而是说我卡住了。你知道吗
旧版Python 2.7代码:
import base64
nowtext= "c:/input_path/"
nowhtml= "c:/output_path/"
with open (nowtext, 'r') as f:
for line in f:
zipped= base64.b64decode(line)
import StringIO
sio= StringIO.StringIO(zipped)
import gzip
u= gzip.GzipFile(fileobj=sio)
unzipped= u.read()
wrapper= """<img src="data:image/bmp;base64,%s" />"""
h= open (nowhtml,'a')
h.write(wrapper % unzipped + '\n')
尝试转换为python3
import base64
nowtext= "c:/input_path/"
nowhtml= "c:/output_path/"
with open (nowtext, 'r') as f:
for line in f:
zipped= base64.b64decode(line)
import io
sio= io.BytesIO(zipped)
import gzip
u= gzip.decompress(sio)
unzipped= u.read()
wrapper= """<img src="data:image/bmp;base64,%s" />"""
h= open (nowhtml,'a')
h.write(wrapper % unzipped + '\n')
不需要将数据包装到file对象和} function 直接解压缩数据。您的代码混淆了
GzipFile()
对象中进行解压缩。只需使用^{gzip.GZipFile()
和gzip.decompress()
;不要将一个文件对象传递给直接处理bytes
值的函数。你知道吗我将假设解码的数据本身是一个有效的Base64字符串(否则您的Python2代码将无法工作),因此我们需要使用ASCII编解码器对您从解压缩中获得的
bytes
值进行解码:注意,我只打开一次输出文件。对于每一行,通过一次又一次地打开文件来减慢脚本的速度是没有意义的。你知道吗
相关问题 更多 >
编程相关推荐