21 เมษายน 2558

Published 4/21/2558 by with 0 comment

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

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

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


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

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

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

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

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

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

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

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

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

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

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

[python]
ZipFile.read(name, pwd=None)
[/python]

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

[python]
ZipFile.setpassword(pwd)
[/python]

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

[python]
ZipFile.namelist()
[/python]

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

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

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

[python]
ZipFile.infolist()
[/python]

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

[python]
ZipInfo.filename
[/python]

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

[python]
ZipInfo.date_time
[/python]

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

[python]
ZipInfo.file_size
[/python]

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

[python]
ZipInfo.compress_size
[/python]

การใช้งาน



[python]
import zipfile
[/python]

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

[python]
>>>> 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
[/python]

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

[python]
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
[/python]

สร้างไฟล์ zip

[python]
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()
[/python]

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

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

คลายไฟล์ zip

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

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

[python]
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
[/python]

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

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

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)