我之前使用bz2尝试解压缩输入。我想解码的输入已经是压缩格式,所以我决定将格式输入到交互式Python控制台中:
>>> import bz2
>>> bz2.decompress(input)
一切正常,没有任何错误。但是,当我尝试从html文件中提取文本然后将其解压缩时,得到了不同的结果:
file = open("example.html", "r")
contents = file.read()
# Insert code to pull out the text, which is of type 'str'
result = bz2.decompress(parsedString)
我检查了与原始字符串解析的字符串,它看起来相同。此外,当我将要解压缩的字符串复制并粘贴到我的.py文件中时(基本上用双括号“”括起来),它可以正常工作。我也尝试用“ rb”打开,希望它将.html文件看成一个二进制文件,尽管它也无法正常工作。
我的问题是:这两个字符串有什么区别?它们都是'str'类型的,所以我假设存在根本的区别。此外,我将如何以一种不会被视为错误数据流的方式从.html中检索bz2内容?任何帮助表示赞赏。谢谢!
最佳答案
我的猜测是html文件具有数据的文本表示形式,而不是文件本身中的实际二进制数据。
例如看下面的代码:
>>> t = '\x80'
>>> print t
>>> '\x80'
但是说我创建一个内容为
\x80
的文本文件并执行:with open('file') as f:
t = f.read()
print t
我会回来的:
'\\x80'
在这种情况下,您可以使用eval获得所需的结果:
result = bz2.decompress(eval('"'+parsedString'"'))
只要确保仅对受信任的数据执行此操作即可。