提供簡答的介面來壓縮和解壓壓縮檔案,類似gnu程式gzip和gunzip。
資料壓縮由zlib模組提供。
注意:不支援由gzip和gunzip程式解壓縮的其他檔案格式,例如compress和pack生成的檔案格式。
import gzip
with gzip.open('./desktop/file.txt.gz','rb') as f:
file_content = f.read()
import gzip
content = b"lots of content here"
with gzip.open('./desktop/file.txt.gz','wb') as f:
file.write(content)
import gzip
import shutil
with open('./desktop/file.txt','rb') as f_in:
with gzip.open('./desktop/file.txt.gz','wb') as f_out:
shutil.copyfileobj(f_in,f_out)
import gzip
s_in = b"lots of content here"
s_out = gzip.compress(s_in)
提供了使用lzma壓縮演算法壓縮和解壓縮資料的類和功能,包括乙個檔案介面,支援xz實用程式使用的.xz和.lzma檔案以及原始壓縮流。
注意:lzmafile是非執行緒安全的,不像bz2.bz2file,需要使用鎖來保護它。
import lzma
with lzma.open('file.xz') as f:
file_content = f.read()
import lzma
data = b"insert data here"
with lzma.open('file.xz','w') as f:
f.write(data)
import lzma
data_in = b"insert data here"
data_out = lzma.compress(data_in)
import lzma
lzc = lzma.lzmacompressor()
out1 = lzc.compress(b"some data\n")
out2 = lzc.compress(b"another piece of data\n")
out3 = lzc.compress(b"even more data\n")
out4 = lzc.flush()
# 連線所有部分輸出
result = b"".join([out1,out2,out3,out4])
import lzma
with open('file.xz','wb') as f:
f.write(b'this data will not be compressed\n')
with lzma.open(f,'w') as lzf:
lzf.write(b'this *will* be compressed\n')
f.write(b『not compressed\n')
import lzma
my_filters = [
, ,]with lzma.open('file.xz','w',filters=my_filters) as f:
f.write(b"blah blah blah")
zip是常見的歸檔和壓縮標準。
zipfile提供用於建立,讀取,寫入,追加和列舉zip檔案的工具。
zipfile支援zip存檔中加密檔案的解密,但無法建立加密檔案。
注意:zip使用python解密而非c解密。
with zipfile('spam.zip','w') as myzip:
myzip.write('eggs.txt')
# 即使發生異常,myzip在with語句結束之後關閉
with zipfile('spam.zip','w') as myzip:
with myzip.open('eggs.txt') as myfile:
print(myfile.read())
zf = pyzipfile('myprog.zip')
def notests(s):
fn=os.path.basename(s)
return(not(fn=='test') or fn.startwith('test_'))
zf.writepy('myprog',filterfunc=notests)
命令列介面# 列舉檔案到建立monty.zip
python -m zipfile -c monty.zip spam.txt eggs.txt
# 列舉目錄source_dir到建立monty.zip
python -m zipfile -c monty.zip source_dir/
# 解壓monty.zip到目標目錄target_dir
python -m zipfile -e monty.zip target_dir/
# 列舉monty.zip的檔案
python -m zipfile -l monty.zip
# 測試monty.zip的有效性
python -m zipfile -t monty.zip
tarfile可以讀取和寫入tar檔案,包括使用gzip,bz2和lzma壓縮的檔案。
示例
import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
import os
import tarfile
def py_files(members):
for tarinfo in members:
if os.path.splitext(tarinfo.name)[1]=='.py':
yield tarinfo
tar = tarfile.open("smaple.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
import tarfile
tar = tarfile.open('sample.tar','w')
for name in ['foo','bar','quux']:
tar.add(name)
tar.close()
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','r:gz')
for tarinfo in tar:
print(tarinfo.name, 'is',tarinfo.size,'bytes in size and is',end='')
if tarinfo.isreg():
print('a regular file.')
elif tarinfo.isdir():
print('a directory.')
else:
print('something else.')
tar.close()
import tarfile
def reset(trainfo):
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()
命令列工具# 列舉檔案到建立monty.tar
python -m tarfile -c monty.tar spam.txt eggs.txt
# 列舉目錄source_dir到建立monty.tar
python -m tarfile -c monty.tar source_dir/
# 解壓monty.tar到目標目錄target_dir
python -m tarfile -e monty.tar target_dir/
# 列舉monty.tar的檔案
python -m tarfile -l monty.tar
# 測試monty.tar的有效性
python -m tarfile -t monty.tar
# 更多資訊
python -m tarfile -t monty.tar -v
關於指令碼語言
程式是給普通使用者使用的,指令碼是程式設計師使用的。處理特定工作,普通使用者使用特定的程式 也是程式設計師編寫的 這種程式實現的功能通常是比較通用的功能,因為程式設計師編寫乙個程式當然要考慮使用者的數量啊。但是,在工作中,我們會經常遇到一些重複性強,而又個性化的功能。而一般的程式無法滿足要求,這時對...
指令碼語言 shell指令碼
指令碼語言的特徵 指令碼語言 於批處理命令語言,但更接近於程式語言。與批處理命令語言的差別是,指令碼語言有變數和豐富的控制語句 與一般程式語言的差別是 指令碼語言變數的值主要是字串,語言的基本單位是命令 而程式語言變數主要是數值,語言的基本單位是表示式 指令碼語言一般是解釋執行的,速度低,但開發成本...
使用指令碼語言
dim myvar myvar hello world myvar 在這個例子中,option explicit語句強制所有的變數必須專門宣告。dim語句宣告了變數myvar。如果在使用變數前沒有宣告變數,vbscript就會給出執行時錯誤資訊 variable is undefined myvar...