Bagaimana cara membuat file .tar.gz dengan kompresi dengan Python?
python
compression
zip
tarfile
shahjapan
sumber
sumber
Jawaban:
Untuk membangun
.tar.gz
(alias.tgz
) untuk seluruh pohon direktori:Ini akan membuat arsip tar gzip yang berisi satu folder tingkat atas dengan nama dan konten yang sama seperti
source_dir
.sumber
arcname=os.path.basename(source_dir)
maka itu akan memberi Anda seluruh struktur jalursource_dir
dalam file tar (dalam banyak situasi, itu mungkin tidak nyaman).arcname=os.path.basename(source_dir)
masih berarti arsip berisi folder yang berisi kontensource_dir
. Jika Anda ingin root arsip berisi konten itu sendiri, dan bukan konten di dalam folder, gunakanarcname=os.path.sep
saja.os.path.sep
, maka arsip akan berisi layanan "." atau folder "/" yang biasanya tidak menjadi masalah, tetapi terkadang dapat menjadi masalah jika nanti Anda memproses arsip ini secara terprogram. Tampaknya satu-satunya cara yang benar-benar bersih adalah dengan melakukanos.walk
dan menambahkan file satu per satuarcname='.'
. Tidak perlu digunakanos.walk
.Jika Anda ingin membuat file terkompresi tar.bz2, cukup ganti nama ekstensi file dengan ".tar.bz2" dan "w: gz" dengan "w: bz2".
sumber
with tarfile.open( ..
Python, daripada meneleponopen
danclose
secara manual. Ini juga terjadi saat membuka file biasa.Anda memanggil tarfile.open dengan
mode='w:gz'
, yang berarti "Terbuka untuk tulisan terkompresi gzip."Anda mungkin ingin mengakhiri nama file (
name
argumen keopen
) dengan.tar.gz
, tetapi itu tidak mempengaruhi kemampuan kompresi.BTW, Anda biasanya mendapatkan kompresi yang lebih baik dengan mode
'w:bz2'
, sepertitar
biasanya dapat mengompres dengan lebih baikbzip2
daripada yang dapat dikompresgzip
.sumber
Jawaban sebelumnya menyarankan penggunaan
tarfile
modul Python untuk membuat.tar.gz
file dengan Python. Itu jelas merupakan solusi yang bagus dan bergaya Python, tetapi memiliki kelemahan serius dalam kecepatan pengarsipan. Pertanyaan ini menyebutkan bahwatarfile
kira-kira dua kali lebih lambat daripadatar
utilitas di Linux. Menurut pengalaman saya, perkiraan ini cukup tepat.Jadi untuk pengarsipan lebih cepat Anda dapat menggunakan
tar
perintah menggunakansubprocess
modul:sumber
Dalam file tar.gz ini kompres dalam direktori tampilan terbuka Dalam menyelesaikannya gunakan os.path.basename (file_directory)
penggunaannya dalam kompres file tar.gz dalam direktori
sumber
Selain jawaban @Aleksandr Tukallo, Anda juga bisa mendapatkan output dan pesan kesalahan (jika terjadi). Mengompresi folder menggunakan
tar
dijelaskan dengan cukup baik pada jawaban berikut .sumber