1

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

4

1 回答 1

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'"'))

只要确保您只对受信任的数据执行此操作。

于 2013-06-09T07:50:30.300 回答