Как сжать или сжать строку в Python

Я делаю "скрипт" на Python, который отправляет строку в веб-сервис (на C #). Мне НЕОБХОДИМО сжать или сжать эту строку, потому что пропускная способность и данные в МБ ОГРАНИЧЕНЫ (да, заглавными буквами, потому что они очень ограничены).

Я думал преобразовать его в файл, а затем сжать файл. Но я ищу способ напрямую сжать строку.

Как сжать или сжать струну?


person Santiago Mendoza Ramirez    schedule 24.03.2015    source источник
comment
docs.python.org/3/library/archiving.html   -  person Colonel Thirty Two    schedule 25.03.2015
comment
Будет ли ваш веб-сервис понимать вашу сжатую строку?   -  person Selcuk    schedule 25.03.2015
comment
@Selcuk Это идея. Мой веб-сервис распакует строку и сохранит ее в базе данных. Если важно, веб-сервис находится на C # (.NET).   -  person Santiago Mendoza Ramirez    schedule 25.03.2015


Ответы (2)


Как насчет zlib?

import zlib

a = "this string needs compressing"
a = zlib.compress(a)
print zlib.decompress(a) #outputs original contents of a

Вы также можете использовать sys.getsizeof(obj), чтобы узнать, сколько данных занимает объект до и после сжатия.

person hmir    schedule 24.03.2015
comment
Доступен ли zlib на других языках? Моя веб-служба находится на C # (извините, что не добавляю эту информацию). - person Santiago Mendoza Ramirez; 25.03.2015
comment
Я нашел это - person hmir; 25.03.2015
comment
В Python 3 zlib.compress() принимает байтовое значение, поэтому вам нужно сделать что-то вроде zlib.compress(a.encode()), чтобы оно работало. - person Douglas De Rizzo Meneghetti; 04.09.2019

import sys
import zlib


text=b"""This function is the primary interface to this module along with 
decompress() function. This function returns byte object by compressing the data 
given to it as parameter. The function has another parameter called level which 
controls the extent of compression. It an integer between 0 to 9. Lowest value 0 
stands for no compression and 9 stands for best compression. Higher the level of 
compression, greater the length of compressed byte object."""

# Checking size of text
text_size=sys.getsizeof(text)
print("\nsize of original text",text_size)

# Compressing text
compressed = zlib.compress(text)

# Checking size of text after compression
csize=sys.getsizeof(compressed)
print("\nsize of compressed text",csize)

# Decompressing text
decompressed=zlib.decompress(compressed)

#Checking size of text after decompression
dsize=sys.getsizeof(decompressed)
print("\nsize of decompressed text",dsize)

print("\nDifference of size= ", text_size-csize)

введите описание изображения здесь

person SATISH JARANG    schedule 02.06.2020
comment
В Python 3, если вы измените text на строку, compressed = zlib.compress(text) должно быть compressed = zlib.compress(text.encode()). Кажется, что это наиболее эффективно с более длинными струнами. Я попробовал это с 43-длинной строкой [a-v], и разница в размерах (SD) составила всего 10. При использовании brotlipy SD было 23. - person Unknow0059; 30.11.2020