将压缩后的数据作为字符串放入脚本中

Dro*_*ans 0 python compression string io gzip

上周我拿到了一个Lorem Ipsupm生成器,我承认,它很酷。

我的问题:有人可以向我展示有关上述脚本的作者如何将 gzipped 文件的内容作为字符串发布到他们的代码中的教程吗?我不断收到gzip 压缩常规文件的示例,在这里我感觉有点迷茫。

对于它的价值,我有另一个非常相似的模块(它生成随机名称、公司等),现在它从几个不同的文本文件中读取。我更喜欢这种方法;它需要在我的项目中少一个子目录来放置数据,而且它还为我提供了一种新的做事方式。

我对流、IO 类型等很陌生。随意将链接丢弃在我的腿上。片段也总是受到赞赏。

Too*_*ote 5

假设您在 *nix 环境中,您只需要 gzip 和一个 base64 编码器来生成字符串。假设您的内容在 中file.txt,出于本示例的目的,我使用具有该特定名称的随机字节创建了文件。

所以你需要先压缩它:

$ gzip file.txt
Run Code Online (Sandbox Code Playgroud)

这将生成一个file.txt.gz 文件,您现在需要将其嵌入到您的代码中。为此,您需要对其进行编码。一种常见的方法是使用 Base64 编码,这可以通过base64程序完成:

$ base64 file.txt.gz
H4sICGmHsE8AA2ZpbGUudHh0AAGoAFf/jIMKME+MgnEhgS4vd6SN0zIuVRhsj5fac3Q1EV1EvFJK
fBsw+Ln3ZSX7d5zjBXJR1BUn+b2/S3jHXO9h6KEDx37U7iOvmSf6BMo1gOJEgIsf57yHwUKl7f9+
Beh4kwF+VljN4xjBfdCiXKk0Oc9g/5U/AKR02fRwI+zYlp1ELBVDzFHNsxpjhIT43sBPklXW8L5P
d8Ao3i2tQQPf2JAHRQZYYn3vt0tKg7drVKgAAAA=
Run Code Online (Sandbox Code Playgroud)

现在,您拥有在 Python 脚本中使用该文件内容所需的所有内容:

from cStringIO import StringIO
from base64 import b64decode
from gzip import GzipFile

# this is the variable with your file's contents    
gzipped_data = """
H4sICGmHsE8AA2ZpbGUudHh0AAGoAFf/jIMKME+MgnEhgS4vd6SN0zIuVRhsj5fac3Q1EV1EvFJK
fBsw+Ln3ZSX7d5zjBXJR1BUn+b2/S3jHXO9h6KEDx37U7iOvmSf6BMo1gOJEgIsf57yHwUKl7f9+
Beh4kwF+VljN4xjBfdCiXKk0Oc9g/5U/AKR02fRwI+zYlp1ELBVDzFHNsxpjhIT43sBPklXW8L5P
d8Ao3i2tQQPf2JAHRQZYYn3vt0tKg7drVKgAAAA=
"""

# we now decode the file's content from the string and unzip it
orig_file_desc = GzipFile(mode='r', 
                          fileobj=StringIO(b64decode(gzipped_data)))

# get the original's file content to a variable
orig_file_cont = orig_file_desc.read()

# and close the file descriptor
orig_file_desc.close()
Run Code Online (Sandbox Code Playgroud)

显然,您的程序将依赖于 base64、gzip 和 cStringIO python 模块。