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

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


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

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

เปิด()

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

Sr.No. โหมด &การกระทำ
1 'r' หรือ 'r:*'
เปิดอ่านด้วยการบีบอัดแบบโปร่งใส
2 'r:'
เปิดให้อ่านโดยไม่ต้องบีบอัด
3 'r:gz'
เปิดอ่านด้วยการบีบอัด gzip
4 'r:bz2'
เปิดอ่านด้วยการบีบอัด bzip2
5 'r:xz'
เปิดอ่านด้วยการบีบอัด lzma
6 'x' หรือ 'x:'
สร้าง tarfile โดยไม่มีการบีบอัด
7 'x:gz'
สร้างไฟล์ tarfile ด้วยการบีบอัด gzip
8 'x:bz2'
สร้าง tarfile ด้วยการบีบอัด bzip2
9 'x:xz'
สร้าง tarfile ด้วยการบีบอัด lzma
10 'a' หรือ 'a:'
เปิดสำหรับการต่อท้ายโดยไม่มีการบีบอัด
11 'w' หรือ 'w:'
เปิดให้เขียนแบบไม่บีบอัด
12 'w:gz'
เปิดสำหรับการเขียนบีบอัด gzip
13 'w:bz2'
เปิดสำหรับการเขียนบีบอัด bzip2
14 'w:xz'
เปิดสำหรับการเขียนบีบอัด lzma

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

TarFile()

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

วิธีการอื่นๆ ในคลาสนี้มีดังนี้

เพิ่ม()

เมธอดนี้จะเพิ่มไฟล์ลงในไฟล์เก็บถาวร เมธอดต้องการชื่อซึ่งสามารถเป็นชื่อไฟล์ ไดเร็กทอรี ลิงก์สัญลักษณ์ ทางลัด ฯลฯ ไดเร็กทอรีจะถูกเพิ่มซ้ำตามค่าเริ่มต้น เพื่อป้องกันการเพิ่มแบบเรียกซ้ำ ให้ตั้งค่าพารามิเตอร์แบบเรียกซ้ำเป็นเท็จ

addfile()

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

แตกไฟล์()

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

สารสกัด()

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

ตัวอย่างต่อไปนี้จะเปิดไฟล์ 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 หรือ --list แสดงรายการไฟล์ใน tarfile
-c หรือ --create สร้าง tarfile จากไฟล์ต้นฉบับ
-e หรือ --extract แตกไฟล์ tarfile ลงในไดเร็กทอรีปัจจุบันหากไม่ได้ระบุ output_dir
-t หรือ --test ทดสอบว่า tarfile นั้นถูกต้องหรือไม่
-v หรือ --verbose เอาต์พุตแบบละเอียด

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

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

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

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

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