python 資料壓縮

2022-04-19 05:48:19 字數 4032 閱讀 5613

zlib 壓縮

import

zlib

import

this

s = this.s.encode('

utf8

')*10

for i in range(10):

data = zlib.compress(s,i) #

compress 接收兩個引數分別是要壓縮的位元組和壓縮等級。

de_data = zlib.decompress(data) #

解壓縮print(f"

data:,s:

")

結果如下:

data:8571,s:8560data:562,s:8560data:560,s:8560data:558,s:8560data:519,s:8560data:511,s:8560 #

可以看出壓縮到極限以後無法在繼續壓縮

data:511,s:8560data:511,s:8560data:511,s:8560data:511,s:8560

這個壓縮方法有乙個明顯的缺陷:需要有足夠大的記憶體去儲存待壓縮資料和壓縮後的資料。那我們是否可以每次壓縮一部分呢,也是可以的

import

zlib

import

this

s = this.s*10with open(

'a.txt

','w

') as t:

t.write(s)

com =zlib.compressobj()

with open(

'a.txt

', 'rb'

) as f:

while

true:

a = f.read(64)

ifnot

a:

break

data =com.compress(a)

ifdata:

print(f"

data:")

else

:

print("

doing....")

result =com.flush()

print(f"

result:

")

結果如下:

doing....

doing....

doing....

doing....

doing....

doing....

doing....

doing....

result:515

gzip 壓縮資料

gzip 和 zlib都有compress和deconpress方法,用法也是一樣的,說說檔案的操作把

讀取壓縮檔案示例

import

gzip

with gzip.open(

'file.txt.gz

', 'rb'

) as f:

file_content = f.read()

建立壓縮gzip檔案的示例:

import

gzip

content = "

lots of content here

"with gzip.open(

'file.txt.gz

', 'wb'

) as f:

f.write(content)

gzip壓縮現有檔案的示例:

import

gzip

import

shutil

with open(

'file.txt

', '

rb') as f_in, gzip.open('

file.txt.gz

', 'wb'

) as f_out:

shutil.copyfileobj(f_in, f_out)

bz2壓縮

bz2.compress

bz2.decompress

基本與zlib一樣不多說

tarfile 壓縮資料

如何將整個tar存檔解壓縮到當前工作目錄:

import

tarfile

tar = tarfile.open("

sample.tar.gz")

tar.extractall()

tar.close()

如何tarfile.extractall()使用生成器函式而不是列表來提取tar存檔的子集:

import

osimport

tarfile

defpy_files(members):

for tarinfo in

members:

if os.path.splitext(tarinfo.name)[1] == "

.py":  

yield

tarinfo

tar = tarfile.open("

sample.tar.gz")

tar.extractall(members=py_files(tar))

tar.close()

如何從檔名列表建立未壓縮的tar存檔:

import

tarfile

tar = tarfile.open("

sample.tar

", "w"

)for name in ["

foo", "

bar", "

quux"]:

tar.add(name)

tar.close()

使用with語句的相同示例:

import

tarfile

with tarfile.open(

"sample.tar

", "w"

) as tar:

for name in ["

foo", "

bar", "

quux"]:

tar.add(name)

import

tarfile

tar = tarfile.open("

sample.tar.gz

", "

r:gz")

for tarinfo in

tar:

print tarinfo.name, "

is", tarinfo.size, "

bytes in size and is",

iftarinfo.isreg():

print

"a regular file.

"elif

tarinfo.isdir():

print

"a directory.

"else

:    

print

"something else.

"tar.close()

如何使用以下過濾器 引數建立存檔並重置使用者資訊tarfile.add():

import

tarfile

defreset(tarinfo):

tarinfo.uid = tarinfo.gid =0

tarinfo.uname = tarinfo.gname = "

root

"return

tarinfo

tar = tarfile.open("

sample.tar.gz

", "

w:gz")

tar.add(

"foo

", filter=reset)

tar.close()

ASIHTTPRequest 資料壓縮

從0.9版本開始,asihttprequest會提示伺服器它可以接收gzip壓縮過的資料。apache 2.x以上版本已經配備了mod deflate擴充套件,這使得apache可以透明地壓縮特定種類的資料。要開啟這個特性,你需要在apache的配置檔案中啟用mod deflate。並將mod de...

ASIHTTPRequest 資料壓縮

從0.9版本開始,asihttprequest會提示伺服器它可以接收gzip壓縮過的資料。apache 2.x以上版本已經配備了mod deflate擴充套件,這使得apache可以透明地壓縮特定種類的資料。要開啟這個特性,你需要在apache的配置檔案中啟用mod deflate。並將mod de...

ASIHTTPRequest 資料壓縮

從0.9版本開始,asihttprequest會提示伺服器它可以接收gzip壓縮過的資料。apache 2.x以上版本已經配備了mod deflate擴充套件,這使得apache可以透明地壓縮特定種類的資料。要開啟這個特性,你需要在apache的配置檔案中啟用mod deflate。並將mod de...