21 เมษายน 2558

Published 4/21/2558 by with 0 comment

บีบอัดข้อมูลด้วย 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
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

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

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

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