2011-01-30 35 views
15

Tôi đang cố gắng sử dụng Zlib để nén văn bản.Làm cách nào để nén văn bản?

Ví dụ tôi có một văn bản T='blah blah blah blah' tôi cần phải nén nó cho điều này tôi đang sử dụng S=zlib.compress(T) Bây giờ những gì tôi muốn là để có được những hình thức ASCII của S để tôi có thể giải nén T này nhưng trong một chương trình khác nhau. Cảm ơn,

EDIT: Tôi đoán tôi có một phương pháp để giải quyết nó đây là cách:

import zlib, base64 
text = 'STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW ' 
code = base64.b64encode(zlib.compress(text,9)) 
print code 

mang đến cho:

eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU= 

Bây giờ tôi có thể sao chép mã này vào một chương trình khác nhau để đưa chương trình gốc trở lại:

import zlib, base64 
s='eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU=' 
data = zlib.decompress(base64.b64decode(s)) 
print data 

Pl dễ dàng gợi ý nếu bạn nhận thức được bất kỳ phương pháp nén nào khác sẽ cho kết quả tốt hơn trong khi phù hợp với cùng một cách thức.

+0

Sử dụng zlib để giải nén S? – arthurprs

+0

Điều gì ngăn cản bạn sử dụng [zlib.decompress()] (http://docs.python.org/library/zlib.html#zlib.decompress) trong chương trình khác đó? –

+0

Bạn sẽ chấp nhận câu trả lời của tôi cho câu hỏi trước của bạn? Điều đó có thể khuyến khích tôi giúp bạn với câu hỏi mới này. Bây giờ tôi hiểu những gì bạn đang nhận được. –

Trả lời

-2

Sử dụng dưa chua. Điều này cho phép bạn lưu một đối tượng python vào một luồng (như một tệp) mà sau đó bạn có thể bỏ chọn trong chương trình khác của mình (bạn cũng có thể truyền qua TCP hoặc những gì có bạn; pickle serializes dữ liệu).

http://docs.python.org/library/pickle.html

+0

Ngoại trừ anh muốn văn bản * nén *; nói chung, kết quả dưa trong một chuỗi * dài hơn bao gồm thông tin về cấu trúc và loại. –

+0

Nén không phải là serialization –

10

Chương trình 1:

T = 'blah blah blah blah' 
S = zlib.compress(T) 
with open("temp.zlib", "wb") as myfile: 
    myfile.write(S) 

Điều này tiết kiệm chuỗi nén trong một tập tin gọi là temp.zlib để chương trình 2 sau này có thể lấy và giải nén nó.

Chương trình 2:

with open("temp.zlib", "rb") as myfile: 
    S = myfile.read() 
T = zlib.decompress(S) 
+0

Có, đây là rất gần với những gì tôi muốn, nhưng những gì tôi chính xác cần là để làm điều đó với sự giúp đỡ của hai tập tin duy nhất, mà không sử dụng các tập tin thứ ba. – Quixotic

+0

Tệp thứ ba nào? Ở đây chỉ có một tệp. Nếu bạn đang đếm ứng dụng của mình dưới dạng tệp, thì chắc chắn, đây là điều thứ 3, nhưng nếu bạn không muốn tuần tự hóa dữ liệu vào đĩa, bạn sẽ phải cung cấp cho chúng tôi nhiều thông tin hơn về cách hệ thống hoạt động. –

+0

@Nick Bastin: Kiểm tra http://stackoverflow.com/questions/4844907/text-compression-in-python/4844924#4844924, Lennart Regebro trả lời, tôi không nhận được cách mà anh ta nhận được giá trị nén đó trong biểu mẫu đó . – Quixotic

Các vấn đề liên quan