将gzip数据作为字符串放入脚本中

2024-09-28 03:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我上周弄到了一个Lorem Ipsupm发电机,我承认,它相当酷。在

我的问题:有人能给我看一个教程,说明上面脚本的作者是如何将gzip文件的内容以字符串的形式发布到他们的代码中的?我不断地得到gzipping a regular file的例子,我觉得有点迷失了。在

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

我对流、IO类型等都很陌生。请随意把链接扔在我的大腿上。窃听者也总是受到赞赏的。在


Tags: 文件字符串代码脚本内容教程作者形式
3条回答

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

所以你需要先压缩它:

$ gzip file.txt

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

^{pr2}$

现在,您已经具备了在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()

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

这个怎么样:压缩并编码一个字符串,将其打印出来,然后解码并再次解压缩。在

from StringIO import StringIO
import base64
import gzip

contents = 'The quick brown fox jumps over the lazy dog'

zip_text_file = StringIO()

zipper = gzip.GzipFile(mode='wb', fileobj=zip_text_file)

zipper.write(contents)
zipper.close()

enc_text =  base64.b64encode(zip_text_file.getvalue())
print enc_text

sample_text_file = gzip.GzipFile(mode='rb',
    fileobj=StringIO(base64.b64decode(enc_text)))
DEFAULT_SAMPLE = sample_text_file.read()
sample_text_file.close()
print DEFAULT_SAMPLE

我不知道你到底在问什么,但这是一个刺。。。在

lipsum.py的作者将压缩数据作为Base64编码文本的块嵌入到代码中。Base64是一种编码机制,用于使用可打印的ASCII字符表示二进制数据。它可以用于在Python代码中包含二进制数据。它更常用于在电子邮件附件中包含二进制数据…下次有人给你发送图片或PDF文档时,看看原始邮件,你会看到很多相同的东西。在

Python的base64模块提供了在base64和二进制数据表示之间进行转换的例程……一旦你有了数据的二进制表示,无论是通过从文件中读取数据还是对嵌入在代码中的字符串进行解码,你得到的结果都无关紧要。在

Python的gzip模块可用于解压缩数据。它需要一个类似于文件的对象…而Python提供StringIO模块将字符串包装在正确的方法集中,使它们的行为类似于文件。您可以在lipsum.py中的以下代码中看到:

sample_text_file = gzip.GzipFile(mode='rb',
    fileobj=StringIO(base64.b64decode(DEFAULT_SAMPLE_COMPRESSED)))

这将创建一个StringIO对象,其中包含存储在DEFAULT_SAMPLE_COMPRESSED中的base64编码值的二进制表示。在

这里提到的所有模块都在Python standard library的文档中进行了描述。在

一般来说,我不建议像这样在代码内联中包含数据,除非数据很小且相对静态。否则,将其打包到Python包中,这样更容易编辑和跟踪更改。在

我回答正确的问题了吗?在

相关问题 更多 >

    热门问题