zlib 壓縮
importzlib
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
這個壓縮方法有乙個明顯的缺陷:需要有足夠大的記憶體去儲存待壓縮資料和壓縮後的資料。那我們是否可以每次壓縮一部分呢,也是可以的
importzlib
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方法,用法也是一樣的,說說檔案的操作把
讀取壓縮檔案示例
importgzip
with gzip.open(
'file.txt.gz
', 'rb'
) as f:
file_content = f.read()
建立壓縮gzip檔案的示例:
importgzip
content = "
lots of content here
"with gzip.open(
'file.txt.gz
', 'wb'
) as f:
f.write(content)
gzip壓縮現有檔案的示例:
importgzip
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存檔解壓縮到當前工作目錄:
importtarfile
tar = tarfile.open("
sample.tar.gz")
tar.extractall()
tar.close()
如何tarfile.extractall()使用生成器函式而不是列表來提取tar存檔的子集:
importosimport
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存檔:
importtarfile
tar = tarfile.open("
sample.tar
", "w"
)for name in ["
foo", "
bar", "
quux"]:
tar.add(name)
tar.close()
使用with語句的相同示例:
importtarfile
with tarfile.open(
"sample.tar
", "w"
) as tar:
for name in ["
foo", "
bar", "
quux"]:
tar.add(name)
importtarfile
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():
"a regular file.
"elif
tarinfo.isdir():
"a directory.
"else
:
"something else.
"tar.close()
如何使用以下過濾器 引數建立存檔並重置使用者資訊tarfile.add():
importtarfile
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...