Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

อ่านและเขียนไฟล์ถาวร tar ด้วย Python (tarfile)

ยูทิลิตี้ 'tar' เริ่มแนะนำสำหรับระบบปฏิบัติการ UNIX วัตถุประสงค์คือรวบรวมหลายไฟล์ในไฟล์เก็บถาวรเดียว บ่อยครั้งเรียกว่า tarball ซึ่งทำให้กระจายไฟล์ง่ายขึ้น ฟังก์ชันในโมดูล tarfile ของไลบรารีมาตรฐาน Python ช่วยสร้างไฟล์เก็บถาวร tar และแยกจาก tarball ตามต้องการ ไฟล์เก็บถาวรสามารถสร้างได้ด้วยการบีบอัด gzip, bz2 และ lzma หรือไม่บีบอัดเลย

ฟังก์ชันหลักที่กำหนดในโมดูลนี้คือ open() ซึ่งใช้สำหรับเขียนไปยังไฟล์ tar หรืออ่านจากมัน

open()

ฟังก์ชันนี้คืนค่าอ็อบเจ็กต์ TarFile ที่สอดคล้องกับชื่อไฟล์ที่ให้มาผ่านพารามิเตอร์ ฟังก์ชันต้องการพารามิเตอร์อีกตัวหนึ่งชื่อ mode ซึ่งค่าเริ่มต้นคือ 'r' แสดงถึงไม่มีการบีบอัด โหมดอื่นๆ รายการด้านล่าง:

Sr.No. Mode & action
1 'r' or 'r:*'
เปิดเพื่ออ่านพร้อมการบีบอัดโปร่งใส (transparent compression)
2 'r:'
เปิดเพื่ออ่านโดยไม่มีการบีบอัด
3 'r:gz'
เปิดเพื่ออ่านพร้อมการบีบอัด gzip
4 'r:bz2'
เปิดเพื่ออ่านพร้อมการบีบอัด bzip2
5 'r:xz'
เปิดเพื่ออ่านพร้อมการบีบอัด lzma
6 'x' or 'x:'
สร้าง tarfile แบบ exclusive โดยไม่มีการบีบอัด
7 'x:gz'
สร้าง tarfile พร้อมการบีบอัด gzip
8 'x:bz2'
สร้าง tarfile พร้อมการบีบอัด bzip2
9 'x:xz'
สร้าง tarfile พร้อมการบีบอัด lzma
10 'a' or 'a:'
เปิดเพื่อต่อท้ายโดยไม่มีการบีบอัด
11 'w' or 'w:'
เปิดเพื่อเขียนโดยไม่มีการบีบอัด
12 'w:gz'
เปิดเพื่อเขียนพร้อมการบีบอัด gzip
13 'w:bz2'
เปิดเพื่อเขียนพร้อมการบีบอัด bzip2
14 'w:xz'
เปิดเพื่อเขียนพร้อมการบีบอัด lzma

โมดูลกำหนดคลาส TarFile แทนที่จะใช้ฟังก์ชัน open() อ็อบเจ็กต์ TarFile สามารถสร้างได้โดยการเรียกคอนสตรัคเตอร์

TarFile()

คอนสตรัคเตอร์นี้ต้องการชื่อไฟล์และพารามิเตอร์ mode เช่นกัน ค่าที่เป็นไปได้ของพารามิเตอร์ mode คือเหมือนด้านบน

เมธอดอื่นๆ ในคลาสนี้มีดังนี้:

add()

เมธอดนี้เพิ่มไฟล์เข้าไปในไฟล์เก็บถาวร เมธอดต้องการชื่อซึ่งอาจเป็นชื่อไฟล์, ไดเรกทอรี, symbolic link, shortcut ฯลฯ ไดเรกทอรีถูกเพิ่มแบบ recursive ตามค่าเริ่มต้น เพื่อป้องกันการเพิ่มแบบ recursive ตั้งค่าพารามิเตอร์ recursive เป็น False

addfile()

เมธอดนี้เพิ่มอ็อบเจ็กต์ TarInfo เข้าไปในไฟล์เก็บถาวร

extractall()

เมธอดนี้แยกสมาชิกทั้งหมดของไฟล์เก็บถาวรเข้าไปในพาธปัจจุบัน หากพาธอื่นไม่ได้ระบุชัดเจน

extract()

เมธอดนี้แยกสมาชิกที่ระบุไปยังพาธที่ให้มา ค่าเริ่มต้นคือพาธปัจจุบัน

ตัวอย่างต่อไปนี้เปิดไฟล์ tar สำหรับการบีบอัดด้วยอัลกอริทึม gzip และเพิ่มไฟล์เข้าไป:

>>> fp = tarfile.open("zen.tar.gz", "w:gz")
>>> fp.add("zen.txt")
>>> fp.close()

สมมติว่าไฟล์ 'zen.txt' อยู่ในไดเรกทอรีทำงานปัจจุบัน จะถูกเพิ่มในไฟล์ 'zen.tar.gz'

โค้ดต่อไปนี้แยกไฟล์จากไฟล์เก็บถาวร tar และแยกไฟล์ทั้งหมด (ในกรณีนี้มีเพียงไฟล์เดียว) และวางไว้ในโฟลเดอร์ปัจจุบัน เพื่อตรวจสอบผลลัพธ์ คุณอาจลบหรือเปลี่ยนชื่อ 'zen.txt' ในโฟลเดอร์ปัจจุบัน

>>> fp = tarfile.open("zen.tar.gz", "r:gz")
>>> fp.extractall()
>>> fp.close()

คุณจะพบว่าไฟล์ 'zen.txt' จะปรากฏในไดเรกทอรีปัจจุบัน

เพื่อสร้าง tar ที่ประกอบด้วยไฟล์ทั้งหมดในไดเรกทอรีปัจจุบัน ใช้โค้ดต่อไปนี้:

import tarfile, glob
>>> fp = tarfile.open('file.tar', 'w')
>>> for file in glob.glob('*.*'):
...     fp.add(file)
>>> fp.close()

อินเทอร์เฟซบรรทัดคำสั่ง

การสร้างและแยกไฟล์ tar สามารถทำได้ผ่านอินเทอร์เฟซบรรทัดคำสั่ง ตัวอย่าง ไฟล์ 'lines.txt' ถูกเพิ่มในไฟล์ tar โดยคำสั่งต่อไปนี้ที่รันในหน้าต่างคำสั่ง:

C:\python36 >python -m tarfile -c line.tar lines.txt

ตัวเลือกบรรทัดคำสั่งต่อไปนี้สามารถใช้ได้:

-l or --list แสดงรายการไฟล์ใน tarfile
-c or --create สร้าง tarfile จากไฟล์ต้นทาง
-e or --extract แยก tarfile ไปยังไดเรกทอรีปัจจุบัน หาก output_dir ไม่ได้ระบุ
-t or --test ทดสอบว่า tarfile ถูกต้องหรือไม่
-v or --verbose เอาต์พุทแบบละเอียด

คำสั่งบรรทัดคำสั่งต่อไปนี้จะแยก line.tar ในโฟลเดอร์ newdir ภายใต้ไดเรกทอรีปัจจุบัน:

C:\python36>python -m tarfile -e line.tar newdir/

คำสั่งบรรทัดคำสั่งต่อไปนี้จะแสดงรายการไฟล์ทั้งหมดในไฟล์เก็บถาวร tar:

C:\python36>python -m tarfile -l files.tar

บทความนี้เกี่ยวกับโมดูล tarfile อธิบายคลาสและฟังก์ชันที่กำหนดในมัน