我们有一个名为“analysis_data_table”的表,我从其中获取名为“tags”的列,该列中的条目可以从空记录到包含 sql 查询、http url 等的长字符串。
我的目的是在存储之前压缩该字段,并在需要时解压缩。
注意: 这个压缩字符串仍然需要具有可存储条目,因为我必须仅将其保存回某些数据库表列中。
压缩后的字符串可能是一系列无意义的危险字符串(最好是固定长度),可以将其重新转换为原始字符串。
例如
'''
input_string = "Python is language"
output_string = some_encoding(input_string)
which gives maybe "r%234khsjlfgkjlslll;dl;hghfd76890sjkjl7897" (larger than the i/p string)
also if
input_string = "Prerequisiste to learn data science is having command over atleast one programming language"
output_string = some_encoding(input_string)
which gives maybe "m$264khsjlfgkjlslll;dl;hghfd76890snmjl7895" (larger than the i/p string)
'''
所以我们可以注意到两种编码的大小是相同的并且可以存储
请协助编码方式来实现这一点。
zlib
库:
import zlib
input_string = "Python is language"
compressed = zlib.compress(bytes(input_string, 'utf-8'))
print(compressed)
给予
b'x\x9c\x0b\xa8,\xc9\xc8\xcfS\xc8,V\xc8I\xccK/MLO\x05\x00A$\x06\xe3'
。
这是二进制数据(26 字节),通常应该比输入字符串短,但这取决于字符串的编码方式。您必须以不同的方式将其存储在数据库中,例如创建一个新的二进制类型列。由于压缩的开销,较大的输入将产生更好的压缩率。除非您使用不可逆的哈希函数(即您无法恢复原始输入),否则无法创建固定长度的输出。
要从压缩中恢复原始数据,请使用:
original = zlib.decompress(compressed).decode('utf-8')
print(original)
屈服
'Python is language'
。