Skip to content

บีบอัดข้อมูลด้วย zipfile บน Python

บทความนี้จะพาผู้อ่านไปรู้จักกับ zipfile เป็นไลบรารีสำหรับใช้บีบอัดไฟล์และคลายไฟล์บีบอัด .ZIP บนภาษา Python ครับ

คำสั่งของไลบรารี zipfile

คำสั่งเปิดไฟล์ zip

ZipFile.open(ไฟล์, โหมดการเปิดไฟล์, pwd=None)

และอีกคำสั่ง

zipfile.ZipFile(ไฟล์, โหมดการเปิดไฟล์)

คำสั่งเพิ่มไฟล์เข้าไปบีบอัด

ZipFile.write(ไฟล์ที่ต้องการเพิ่มเข้าไปยัง zip, arcname=None, compress_type=None)

สามารถกำหนดชนิดการบีบอัดข้อมูลได้ไฟล์ได้ด้วยการเพิ่มชนิดการบีบอัดข้อมูล เข้าไปในคำสั่ง

ZipFile.write(ไฟล์,compress_type=ชนิดการบีบอัด)

โดยรองรับชนิดการบีบอัดทั้ง zipfile.ZIP_STORED, zipfile.ZIP_DEFLATED, Zzipfile.IP_BZIP2 หรือ zipfile.ZIP_LZMA หากไม่ได้กำหนดชนิดการบีบอัด ชนิดการบีบอัดจะเป็น zipfile.ZIP_STORED
คำสั่งเขียนข้อมูลสตริงเข้าไปยังไฟล์ใน zip

ZipFile.writestr(zinfo_or_arcname, bytes[, compress_type])

คำสั่งอ่านไฟล์ใน zip

ZipFile.read(name, pwd=None)

คำสั่งเข้ารหัสไฟล์ zip

ZipFile.setpassword(pwd)

คำสั่งอ่านรายชื่อไฟล์ใน zip

ZipFile.namelist()

คำสั่งคลายข้อมูลไฟล์ zip

ZipFile.extractall([path[, members[, pwd]]])

คำสั่งดึงรายละเอียดของไฟล์ที่ถูกบีบอัดใน zip

ZipFile.infolist()

โดยใช้งานคู่กับคำสั่ง ZipInfo ครับ
คำสั่งปิดไฟล์
ZipFile.close()
ZipInfo
ดึงข้อมูลของไฟล์ที่บีบอัดอยู่ในไฟล์ zip
คำสั่งดึงชื่อไฟล์

ZipInfo.filename

คำสั่งดึงวันเวลาของไฟล์ใน zip ที่ถูกเปลี่ยนแปลง

ZipInfo.date_time

คำสั่งแสดงขนาดของไฟล์ก่อนถูกบีบอัด

ZipInfo.file_size

คำสั่งแสดงขนาดของไฟล์หลังถูกบีบอัด

ZipInfo.compress_size

การใช้งาน

import zipfile

เข้ามาเมื่อเรียกใช้งานคำสั่งของไลบรารี zipfile
อ่านรายชื่อไฟล์ที่อยู่ใน zip

>>>> import zipfile
>>>> f = zipfile.ZipFile('2012.zip', 'r')
>>>> for i in f.namelist():
....         print(i)
....
RainfallHourlyData2012_Part2.csv
TMDTelemetringRainfallMetadata.docx
1.py
RainfallHourlyData2012_Part1.csv

ดึงรายละเอียดของไฟล์ที่ถูกบีบอัดใน zip

RainfallHourlyData2012_Part1.csv
>>>> for i in f.infolist():
....         print(i.filename,i.date_time, i.file_size)
....
RainfallHourlyData2012_Part2.csv (2015, 4, 20, 14, 55, 56) 32797914
TMDTelemetringRainfallMetadata.docx (2015, 4, 20, 15, 34, 24) 14637
1.py (2015, 4, 20, 18, 29, 54) 762
RainfallHourlyData2012_Part1.csv (2015, 4, 20, 14, 37, 20) 31356377

สร้างไฟล์ zip

import zipfile
import glob, os

file = zipfile.ZipFile("test1.zip", "w") #สร้างไฟล์ test1.zip ด้วยโหมด w

for name in glob.glob("data/*"): #ดึงรายชื่อไฟล์ทั้งหมดที่อยู่ในโฟลเลอร์ data
    file.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED) #บีบอัดไฟล์เข้าไฟล์ zip

file.close()

เพิ่มไฟล์เข้าไปยัง zip

import zipfile
f = zipfile.ZipFile('test2.zip', 'a')
f.write('test1.zip',compress_type=zipfile.ZIP_DEFLATED)
f.close()

คลายไฟล์ zip

import zipfile
f = zipfile.ZipFile('test1.zip', 'r')
f.extractall("dir/") #คลายไฟล์ไปยังโฟลเลอร์ dir
f.close()

เขียนข้อความสตริงเข้าไปยังไฟล์ใน zip

import zipfile

msg = 'This data did not exist in a file.'
with zipfile.ZipFile('writestr.zip',mode='w',compression=zipfile.ZIP_DEFLATED) as zf:
    zf.writestr('from_string.txt', msg) #เขียนข้อความเข้าไปยังไฟล์ from_string.txt

with zipfile.ZipFile('writestr.zip', 'r') as zf:
    print(zf.read('from_string.txt')) #อ่านข้อความในไฟล์ from_string.txt

ผลลัพธ์
b'This data did not exist in a file.'

อ่านเอกสารเพิ่มเติมได้ที่ https://docs.python.org/3/library/zipfile.html
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *