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 file trong một file archive đơn lẻ thường gọi là tarball giúp dễ dàng phân phối các file. Các hàm trong mô-đun tarfile của thư viện chuẩn Python giúp tạo tar archive và trích xuất từ tarball khi cần. Các archive có thể được xây dựng với nén gzip, bz2 và lzma hoặc không nén chút nào.
Hàm chính được định nghĩa trong mô-đun này là open() dùng để ghi vào file tar hoặc đọc từ nó.
Open()
Hàm này trả về đối tượng TarFile tương ứng với tên file được cung cấp cho nó làm tham số. Hàm yêu cầu tham số khác gọi là mode, mặc định là 'r' chỉ ra không nén. Các mode khác được liệt kê dưới:
| Stt | Mode & hành động |
|---|---|
| 1 | 'r' hoặc 'r:*' Mở để đọc với nén minh bạch. |
| 2 | 'r:' Mở để đọc không 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 tarfile độc quyền không nén. |
| 7 | 'x:gz' Tạo tarfile với nén gzip. |
| 8 | 'x:bz2' Tạo tarfile với nén bzip2. |
| 9 | 'x:xz' Tạo tarfile với nén lzma. |
| 10 | 'a' hoặc 'a:' Mở để nối không nén. |
| 11 | 'w' hoặc 'w:' Mở để ghi không nén. |
| 12 | 'w:gz' Mở để ghi nén gzip. |
| 13 | 'w:bz2' Mở để ghi nén bzip2. |
| 14 | 'w:xz' Mở để ghi 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 constructor.
TarFile()
Constructor này cũng cần tên file và tham số mode. Các giá trị có thể của tham số mode như trên.
Các phương thức khác trong lớp này như sau:
add()
Phương thức này thêm file vào archive. Phương thức cần một tên có thể là tên file, thư mục, symbolic link, shortcut, v.v. Thư mục được thêm đệ quy mặc định. Để ngăn thêm đệ quy, đặt tham số recursive thành False.
addfile()
Phương thức này thêm đối tượng TarInfo vào archive.
extractall()
Phương thức này trích xuất tất cả thành viên của archive vào đường dẫn hiện tại nếu đường dẫn khác không được cung cấp tường minh.
extract()
Phương thức này trích xuất thành viên được chỉ định đến đường dẫn cho trước, mặc định là đường dẫn hiện tại.
Ví dụ sau mở file tar để nén với thuật toán gzip và thêm một file vào nó.
>>> fp = tarfile.open("zen.tar.gz", "w:gz")
>>> fp.add("zen.txt")
>>> fp.close()Giả sử file zen.txt hiện diện trong thư mục làm việc hiện tại, nó sẽ được thêm vào file zen.tar.gz.
Mã sau trích xuất file từ archive tar và trích xuất tất cả file (trong trường hợp này chỉ có một) và đặt chúng trong thư mục hiện tại. Để kiểm tra 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 file zen.txt xuất hiện trong thư mục hiện tại.
Để tạo tar bao gồm tất cả file trong thư mục hiện tại, 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
Tạo và trích xuất file tar có thể đạt được qua giao diện dòng lệnh. Ví dụ file lines.txt được thêm vào file tar bằng lệnh sau thực thi 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 dùng:
| -l hoặc --list | Liệt kê file trong tarfile. |
| -c hoặc --create | Tạo tarfile từ file nguồn. |
| -e hoặc --extract | Trích xuất tarfile vào thư mục hiện tại nếu output_dir không chỉ định. |
| -t hoặc --test | Kiểm tra tarfile có hợp lệ hay không. |
| -v hoặc --verbose | Đầu ra chi tiết. |
Dòng lệnh sau sẽ trích xuất line.tar trong thư mục newdir dưới 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ả file trong archive 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à hàm được định nghĩa trong nó.