Python bz2 - 文本与交互式控制台(数据流)

时间:2013-06-09 04:45:48

标签: python string python-2.x bzip2 compression

我之前使用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内容,使其不会被视为不正确的数据流?任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

我的猜测是html文件包含数据的文本表示,而不是文件本身的实际二进制数据。

例如,请查看以下代码:

>>> t = '\x80'
>>> print t
>>> '\x80'

但是我说我创建了一个包含内容\x80的文本文件并执行:

with open('file') as f:
    t = f.read()
print t

我会回来的:

'\\x80'

如果是这种情况,您可以使用eval来获得所需的结果:

result = bz2.decompress(eval('"'+parsedString'"'))

只需确保您只为可信数据执行此操作。