使用Python进行字符串压缩,以便将大小压缩到固定长度

问题描述 投票:0回答:1

我们有一个名为“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)
'''

所以我们可以注意到两种编码的大小是相同的并且可以存储

请协助编码方式来实现这一点。

python-3.x encryption encoding compression hashcode
1个回答
0
投票

无损压缩算法有很多。一种选择是使用

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'

© www.soinside.com 2019 - 2024. All rights reserved.