Computer >> Máy Tính >  >> Lập trình >> Python

Đọc và ghi các tệp lưu trữ tar bằng Python (tarfile)

Tiện ích ‘tar’ ban đầu được giới thiệu cho hệ điều hành UNIX. Mục đích của nó là thu thập nhiều tệp trong một tệp lưu trữ duy nhất thường được gọi là tarball, giúp dễ dàng phân phối tệp. Các hàm trong mô-đun tarfile của thư viện tiêu chuẩn của Python giúp tạo các kho lưu trữ tar và giải nén từ tarball theo yêu cầu. Các kho lưu trữ có thể được tạo bằng nén gzip, bz2 và lzma hoặc hoàn toàn không có bất kỳ nén nào.

Hàm chính được định nghĩa trong mô-đun này là hàm main () sử dụng để hoàn thành việc ghi vào tệp tar hoặc đọc từ nó.

Mở ()

Hàm này trả về một đối tượng TarFile tương ứng với tên tệp được cung cấp cho nó dưới dạng tham số. Hàm yêu cầu một tham số khác được gọi là chế độ, theo mặc định là ‘r’ cho biết không nén. Các chế độ khác được liệt kê bên dưới

Sr.No. Chế độ &hành động
1 'r' hoặc 'r:*'
Mở để đọc với tính năng nén trong suốt.
2 'r:'
Mở để đọc mà không cần nén.
3 'r:gz'
Mở để đọc với nén gzip.
4 'r:bz2'
Mở để đọc với nén bzip2.
5 'r:xz'
Mở để đọc với nén lzma.
6 'x' hoặc 'x:'
Tạo một tệp tarfile riêng mà không cần nén.
7 'x:gz'
Tạo một tệp tarfile với nén gzip.
8 'x:bz2'
Tạo một tệp tarfile với nén bzip2.
9 'x:xz'
Tạo một tệp tarfile với nén lzma.
10 'a' hoặc 'a:'
Mở để bổ sung mà không cần nén.
11 'w' hoặc 'w:'
Mở để viết không nén.
12 'w:gz'
Mở để ghi nén gzip.
13 'w:bz2'
Mở để ghi nén bzip2.
14 'w:xz'
Mở để viết nén lzma.

Mô-đun định nghĩa lớp TarFile. Thay vì hàm open (), đối tượng TarFile có thể được khởi tạo bằng cách gọi hàm tạo.

TarFile ()

Hàm tạo này cũng cần có tên tệp và tham số chế độ. Các giá trị có thể có của tham số chế độ như trên.

Các phương thức khác trong lớp này như sau

add ()

Phương pháp này thêm một tệp vào kho lưu trữ. Phương thức cần một tên có thể là tên của tệp, thư mục, liên kết tượng trưng, ​​phím tắt, v.v. Các thư mục được thêm một cách đệ quy theo mặc định. Để ngăn việc bổ sung đệ quy, hãy đặt tham số đệ quy thành False.

addfile ()

Phương thức này thêm đối tượng TarInfo vào kho lưu trữ.

extractall ()

Phương pháp này trích xuất tất cả các thành viên của kho lưu trữ vào đường dẫn hiện tại nếu bất kỳ đường dẫn nào khác không được cung cấp rõ ràng.

extract ()

Phương thức này trích xuất thành viên được chỉ định đến đường dẫn nhất định, mặc định là đường dẫn hiện tại.

Ví dụ sau sẽ mở một tệp tar để nén bằng thuật toán gzip và thêm một tệp trong đó.

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

Giả sử rằng tệp ‘zen.txt’ có trong thư mục làm việc hiện tại, nó sẽ được thêm vào tệp ‘zen.tar.gz’.

Đoạn mã sau sẽ trích xuất các tệp từ kho lưu trữ tar và trích xuất tất cả các tệp (trong trường hợp này là chỉ bật) và đặt chúng vào thư mục hiện tại. Để xác minh kết quả, bạn có thể xóa hoặc đổi tên ‘zen.txt’ trong thư mục hiện tại.

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

Bạn sẽ thấy rằng tệp ‘zen.txt’ sẽ xuất hiện trong thư mục hiện tại.

Để tạo một tệp tar bao gồm tất cả các tệp trong thư mục hiện tại, hãy sử dụng mã sau

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

Giao diện dòng lệnh

Có thể tạo và trích xuất các tệp tar thông qua giao diện dòng lệnh. Ví dụ:tệp ‘lines.txt’ được thêm vào tệp tar bằng cách thực thi lệnh sau trong cửa sổ lệnh

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

Các tùy chọn dòng lệnh sau có thể được sử dụng.

-l hoặc --list Liệt kê các tệp trong tệp tarfile.
-c hoặc --create Tạo tarfile từ các tệp nguồn.
-e hoặc --extract Giải nén tệp tarfile vào thư mục hiện tại nếu output_dir không được chỉ định.
-t hoặc --test Kiểm tra tệp tarfile có hợp lệ hay không.
-v hoặc --verbose Kết quả dài dòng.

Dòng lệnh sau sẽ giải nén line.tar trong thư mục newdir trong thư mục hiện tại.

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

Dòng lệnh sau sẽ liệt kê tất cả các tệp trong kho lưu trữ tar.

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

Bài viết này về mô-đun tarfile giải thích các lớp và chức năng được định nghĩa trong đó.