Hướng dẫn tarfile python - trăn tarfile

Mã nguồn: lib/tarfile.py Lib/tarfile.py


Mô -đun

$ python -m tarfile -c monty.tar life-of-brian_1979/
1 cho phép đọc và viết tài liệu lưu trữ tar, bao gồm cả những người sử dụng nén GZIP, BZ2 và LZMA. Sử dụng mô-đun
$ python -m tarfile -c monty.tar life-of-brian_1979/
2 để đọc hoặc ghi các tệp
$ python -m tarfile -c monty.tar life-of-brian_1979/
3 hoặc các hàm cấp cao hơn trong SHOWIL.shutil.

Một số sự thật và số liệu:

  • Đọc và ghi

    $ python -m tarfile -c monty.tar life-of-brian_1979/
    
    4,
    $ python -m tarfile -c monty.tar life-of-brian_1979/
    
    5 và
    $ python -m tarfile -c monty.tar life-of-brian_1979/
    
    6 Lưu trữ được nén nếu các mô -đun tương ứng có sẵn.

  • Đọc/Viết hỗ trợ cho định dạng POSIX.1-1988 (USTAR).

  • Đọc/Viết hỗ trợ cho định dạng TAR GNU bao gồm các phần mở rộng dài và LongLink, hỗ trợ chỉ đọc cho tất cả các biến thể của phần mở rộng thưa thớt bao gồm khôi phục các tệp thưa thớt.

  • Đọc/Viết hỗ trợ cho định dạng POSIX.1-2001 (PAX).

  • Xử lý các thư mục, tệp thông thường, liên kết cứng, liên kết tượng trưng, ​​FIFOS, thiết bị ký tự và thiết bị chặn và có thể thu thập và khôi phục thông tin tệp như dấu thời gian, quyền truy cập và chủ sở hữu.

Đã thay đổi trong phiên bản 3.3: Đã thêm hỗ trợ cho nén

$ python -m tarfile -c monty.tar life-of-brian_1979/
6.Added support for
$ python -m tarfile -c monty.tar life-of-brian_1979/
6 compression.

tarfile.open (name = none, mode = 'r', fileObj = none, bufsize = 10240, ** kwargs) ¶open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)

Trả về một đối tượng

$ python -m tarfile -c monty.tar life-of-brian_1979/
8 cho tên đường dẫn. Để biết thông tin chi tiết về các đối tượng
$ python -m tarfile -c monty.tar life-of-brian_1979/
8 và các đối số từ khóa được cho phép, hãy xem các đối tượng Tarfile.TarFile Objects.

Chế độ phải là một chuỗi của Mẫu

$ python -m tarfile -e monty.tar
0, nó mặc định là
$ python -m tarfile -e monty.tar
1. Dưới đây là danh sách đầy đủ các kết hợp chế độ:

cách thức

hoạt động

$ python -m tarfile -e monty.tar
2

Mở để đọc với nén trong suốt (khuyến nghị).

$ python -m tarfile -e monty.tar
3

Mở để đọc độc quyền mà không cần nén.

$ python -m tarfile -e monty.tar
4

Mở để đọc với nén GZIP.

$ python -m tarfile -e monty.tar
5

Mở để đọc với nén BZIP2.

$ python -m tarfile -e monty.tar
6

Mở để đọc với nén LZMA.

$ python -m tarfile -e monty.tar
7 hoặc
$ python -m tarfile -e monty.tar
8

Tạo một tarfile độc ​​quyền mà không cần nén. Tăng ngoại lệ

$ python -m tarfile -e monty.tar
9 nếu nó đã tồn tại.

$ python -m tarfile -e monty.tar  other-dir/
0

Tạo một tarfile với nén gzip. Tăng ngoại lệ

$ python -m tarfile -e monty.tar
9 nếu nó đã tồn tại.

$ python -m tarfile -e monty.tar  other-dir/
2

Tạo một tarfile với nén BZIP2. Tăng ngoại lệ

$ python -m tarfile -e monty.tar
9 nếu nó đã tồn tại.

$ python -m tarfile -e monty.tar  other-dir/
4

Tạo một tarfile với nén LZMA. Tăng ngoại lệ

$ python -m tarfile -e monty.tar
9 nếu nó đã tồn tại.

$ python -m tarfile -e monty.tar  other-dir/
6

Mở để nối thêm không nén. Tệp được tạo nếu nó không tồn tại.

$ python -m tarfile -e monty.tar  other-dir/
7

Mở cho văn bản không nén.

$ python -m tarfile -e monty.tar  other-dir/
8

Mở để viết nén GZIP.

$ python -m tarfile -e monty.tar  other-dir/
9

Mở để viết nén BZIP2.

$ python -m tarfile -l monty.tar
0

Mở cho văn bản nén LZMA.

Lưu ý rằng

$ python -m tarfile -l monty.tar
1,
$ python -m tarfile -l monty.tar
2 hoặc
$ python -m tarfile -l monty.tar
3 là không thể. Nếu chế độ không phù hợp để mở một tệp (nén) nhất định để đọc,
$ python -m tarfile -l monty.tar
4 sẽ được nâng lên. Sử dụng chế độ
$ python -m tarfile -e monty.tar
1 để tránh điều này. Nếu một phương pháp nén không được hỗ trợ,
$ python -m tarfile -l monty.tar
6 sẽ được nâng lên.

Nếu FileObj được chỉ định, nó được sử dụng thay thế cho một đối tượng tệp được mở ở chế độ nhị phân cho tên. Nó được cho là ở vị trí 0.file object opened in binary mode for name. It is supposed to be at position 0.

Đối với các chế độ

$ python -m tarfile -e monty.tar  other-dir/
8,
$ python -m tarfile -e monty.tar
4,
$ python -m tarfile -e monty.tar  other-dir/
9,
$ python -m tarfile -e monty.tar
5,
$ python -m tarfile -e monty.tar  other-dir/
0,
$ python -m tarfile -e monty.tar  other-dir/
2,
import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
3 chấp nhận nén đối số từ khóa (mặc định
import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
4) để chỉ định mức nén của tệp.

Đối với các chế độ

$ python -m tarfile -l monty.tar
0 và
$ python -m tarfile -e monty.tar  other-dir/
4,
import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
3 chấp nhận cài đặt trước từ khóa để chỉ định mức nén của tệp.

Đối với các mục đích đặc biệt, có một định dạng thứ hai cho chế độ:

import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
8.
import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
3 sẽ trả về một đối tượng
$ python -m tarfile -c monty.tar life-of-brian_1979/
8 xử lý dữ liệu của nó dưới dạng luồng khối. Không có tìm kiếm ngẫu nhiên sẽ được thực hiện trên tập tin. Nếu được đưa ra, FileObj có thể là bất kỳ đối tượng nào có phương thức
import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
1 hoặc
import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
2 (tùy thuộc vào chế độ). BufSize chỉ định khối và mặc định là
import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
3 byte. Sử dụng biến thể này kết hợp với ví dụ:
import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
4, đối tượng tệp ổ cắm hoặc thiết bị băng. Tuy nhiên, một đối tượng
$ python -m tarfile -c monty.tar life-of-brian_1979/
8 như vậy bị giới hạn ở chỗ nó không cho phép truy cập ngẫu nhiên, xem các ví dụ. Các chế độ hiện có thể:file object or a tape device. However, such a
$ python -m tarfile -c monty.tar life-of-brian_1979/
8 object is limited in that it does not allow random access, see Examples. The currently possible modes:

Cách thức

Hoạt động

import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
6

Mở một luồng các khối tar để đọc với nén trong suốt.

import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
7

Mở một luồng các khối nhựa không nén để đọc.

import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
8

Mở một luồng nén GZIP để đọc.

import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()
9

Mở một luồng nén BZIP2 để đọc.

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
0

Mở một luồng nén LZMA để đọc.

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
1

Mở một luồng không nén để viết.

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
2

Mở một luồng nén GZIP để viết.

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
3

Mở một luồng nén BZIP2 để viết.

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
4

Mở một luồng nén LZMA để viết.

Đã thay đổi trong phiên bản 3.5: Chế độ

$ python -m tarfile -e monty.tar
7 (Tạo độc quyền) đã được thêm vào.The
$ python -m tarfile -e monty.tar
7 (exclusive creation) mode was added.

Thay đổi trong phiên bản 3.6: Tham số tên chấp nhận một đối tượng giống như đường dẫn.The name parameter accepts a path-like object.

classtarfile.TarFiletarfile.TarFile

Lớp học để đọc và viết tài liệu lưu trữ tar. Không sử dụng lớp này trực tiếp: sử dụng

import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
3 thay thế. Xem các đối tượng Tarfile.TarFile Objects.

tarfile.is_tarfile (tên) ¶is_tarfile(name)

Trả về

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 Nếu tên là tệp lưu trữ tar, mà mô -đun
$ python -m tarfile -c monty.tar life-of-brian_1979/
1 có thể đọc được. Tên có thể là một đối tượng
import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
9, tệp hoặc giống như tệp.

Đã thay đổi trong phiên bản 3.9: Hỗ trợ cho các đối tượng giống như tệp và tệp.Support for file and file-like objects.

Mô -đun

$ python -m tarfile -c monty.tar life-of-brian_1979/
1 xác định các ngoại lệ sau:

Exceptiontarfile.tarerror¶tarfile.TarError

Lớp cơ sở cho tất cả các ngoại lệ

$ python -m tarfile -c monty.tar life-of-brian_1979/
1.

ExceptionTarfile.Readerror¶tarfile.ReadError

Được nâng lên khi lưu trữ TAR được mở, điều đó không thể được xử lý bởi mô -đun

$ python -m tarfile -c monty.tar life-of-brian_1979/
1 hoặc bằng cách nào đó không hợp lệ.

ExceptionTarfile.compressionError¶ tarfile.CompressionError

Được nâng lên khi một phương pháp nén không được hỗ trợ hoặc khi dữ liệu không thể được giải mã đúng.

ExceptionTarfile.streamerror¶ tarfile.StreamError

Được nêu ra cho những hạn chế điển hình cho các đối tượng

$ python -m tarfile -c monty.tar life-of-brian_1979/
8 giống như luồng.

Được nêu ra cho các lỗi không gây tử vong khi sử dụng

import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
4, nhưng chỉ khi
import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
5
import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
6.

Được nâng lên bởi

import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
7 nếu bộ đệm nó không hợp lệ.

Các hằng số sau đây có sẵn ở cấp độ mô -đun:

tarfile.encoding¶ENCODING

Mã hóa ký tự mặc định:

import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
8 trên Windows, giá trị được trả về bởi
import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
9 nếu không.

Mỗi hằng số sau đây xác định một định dạng lưu trữ TAR mà mô -đun

$ python -m tarfile -c monty.tar life-of-brian_1979/
1 có thể tạo. Xem phần Định dạng TAR được hỗ trợ để biết chi tiết.Supported tar formats for details.

tarfile.ustar_format¶USTAR_FORMAT

POSIX.1-1988 (Ustar) định dạng.

tarfile.gnu_format¶GNU_FORMAT

Định dạng TAR GNU.

tarfile.pax_format¶PAX_FORMAT

Định dạng POSIX.1-2001 (PAX).

tarfile.default_format¶DEFAULT_FORMAT

Định dạng mặc định để tạo tài liệu lưu trữ. Đây là

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
1.

Thay đổi trong phiên bản 3.8: Định dạng mặc định cho tài liệu lưu trữ mới đã được thay đổi thành

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
1 từ
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
3.The default format for new archives was changed to
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
1 from
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
3.

Đối tượng Tarfile

Đối tượng

$ python -m tarfile -c monty.tar life-of-brian_1979/
8 cung cấp một giao diện cho lưu trữ tar. Một kho lưu trữ tar là một chuỗi các khối. Một thành viên lưu trữ (một tệp được lưu trữ) được tạo thành từ một khối tiêu đề theo sau là các khối dữ liệu. Có thể lưu trữ một tập tin trong kho lưu trữ tar nhiều lần. Mỗi thành viên lưu trữ được đại diện bởi một đối tượng
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5, xem các đối tượng Tarinfo để biết chi tiết.TarInfo Objects for details.

Một đối tượng

$ python -m tarfile -c monty.tar life-of-brian_1979/
8 có thể được sử dụng làm trình quản lý ngữ cảnh trong câu lệnh
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
7. Nó sẽ tự động được đóng khi khối hoàn thành. Xin lưu ý rằng trong trường hợp ngoại lệ, một kho lưu trữ được mở để viết sẽ không được hoàn thiện; Chỉ các đối tượng tệp được sử dụng nội bộ sẽ được đóng. Xem phần ví dụ cho một trường hợp sử dụng.Examples section for a use case.

Mới trong phiên bản 3.2: Đã thêm hỗ trợ cho giao thức quản lý bối cảnh.Added support for the context management protocol.

classtarfile.tarfile (name = none, mode = 'r', fileObj = none, format = default_format, tarinfo = tarinfo, dereference = false 0, ErrorLevel = 0) ¶ tarfile.TarFile(name=None, mode='r', fileobj=None, format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False, ignore_zeros=False, encoding=ENCODING, errors='surrogateescape', pax_headers=None, debug=0, errorlevel=0)

Tất cả các đối số sau là tùy chọn và cũng có thể được truy cập dưới dạng thuộc tính thể hiện.

Tên là tên đường dẫn của kho lưu trữ. Tên có thể là một đối tượng giống như đường dẫn. Nó có thể được bỏ qua nếu FileObj được đưa ra. Trong trường hợp này, thuộc tính đối tượng tệp ____ ____998 được sử dụng nếu nó tồn tại.path-like object. It can be omitted if fileobj is given. In this case, the file object’s

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
8 attribute is used if it exists.

Chế độ là

$ python -m tarfile -e monty.tar
1 để đọc từ kho lưu trữ hiện có,
$ python -m tarfile -c monty.tar life-of-brian_1979/
00 để nối dữ liệu vào một tệp hiện có,
$ python -m tarfile -c monty.tar life-of-brian_1979/
01 để tạo một tệp mới ghi đè lên một tệp hiện có hoặc
$ python -m tarfile -e monty.tar
7 để tạo một tệp mới chỉ khi nó chưa tồn tại.

Nếu FileObj được cung cấp, nó được sử dụng để đọc hoặc ghi dữ liệu. Nếu nó có thể được xác định, chế độ được ghi đè bởi chế độ FileObj. FileObj sẽ được sử dụng từ vị trí 0.

Ghi chú

FileObj không bị đóng, khi

$ python -m tarfile -c monty.tar life-of-brian_1979/
8 bị đóng.

Định dạng kiểm soát định dạng lưu trữ để viết. Nó phải là một trong những hằng số

$ python -m tarfile -c monty.tar life-of-brian_1979/
04,
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
3 hoặc
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
1 được xác định ở cấp độ mô -đun. Khi đọc, định dạng sẽ được tự động phát hiện, ngay cả khi các định dạng khác nhau có mặt trong một kho lưu trữ duy nhất.

Đối số Tarinfo có thể được sử dụng để thay thế lớp

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 mặc định bằng một đối số khác.

Nếu dereference là

$ python -m tarfile -c monty.tar life-of-brian_1979/
08, hãy thêm các liên kết tượng trưng và cứng vào kho lưu trữ. Nếu đó là
import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7, hãy thêm nội dung của các tệp đích vào kho lưu trữ. Điều này không có tác dụng đối với các hệ thống không hỗ trợ các liên kết tượng trưng.

Nếu bỏ qua_zeros là

$ python -m tarfile -c monty.tar life-of-brian_1979/
08, hãy coi một khối trống là phần cuối của kho lưu trữ. Nếu đó là
import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7, hãy bỏ qua các khối trống (và không hợp lệ) và cố gắng lấy càng nhiều thành viên càng tốt. Điều này chỉ hữu ích cho việc đọc tài liệu lưu trữ được nối hoặc bị hư hỏng.

Gỡ lỗi có thể được đặt từ

$ python -m tarfile -c monty.tar life-of-brian_1979/
12 (không có tin nhắn gỡ lỗi) cho đến
$ python -m tarfile -c monty.tar life-of-brian_1979/
13 (tất cả các tin nhắn gỡ lỗi). Các tin nhắn được viết thành
$ python -m tarfile -c monty.tar life-of-brian_1979/
14.

Nếu ErrorLevel là

$ python -m tarfile -c monty.tar life-of-brian_1979/
12, tất cả các lỗi sẽ bị bỏ qua khi sử dụng
import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
4. Tuy nhiên, chúng xuất hiện dưới dạng thông báo lỗi trong đầu ra gỡ lỗi, khi gỡ lỗi được bật. Nếu
$ python -m tarfile -c monty.tar life-of-brian_1979/
17, tất cả các lỗi gây tử vong được nêu ra dưới dạng
$ python -m tarfile -c monty.tar life-of-brian_1979/
18 ngoại lệ. Nếu
$ python -m tarfile -c monty.tar life-of-brian_1979/
19, tất cả các lỗi không gây tử vong cũng được nêu ra dưới dạng
$ python -m tarfile -c monty.tar life-of-brian_1979/
20 ngoại lệ.

Các đối số mã hóa và lỗi xác định mã hóa ký tự được sử dụng để đọc hoặc viết kho lưu trữ và cách xử lý lỗi chuyển đổi. Các cài đặt mặc định sẽ hoạt động cho hầu hết người dùng. Xem phần Các vấn đề Unicode để biết thông tin chuyên sâu.Unicode issues for in-depth information.

Đối số PAX_Headers là một từ điển tùy chọn của các chuỗi sẽ được thêm vào dưới dạng tiêu đề toàn cầu PAX nếu định dạng là

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
1.

Đã thay đổi trong phiên bản 3.2: Sử dụng

$ python -m tarfile -c monty.tar life-of-brian_1979/
22 làm mặc định cho đối số lỗi.Use
$ python -m tarfile -c monty.tar life-of-brian_1979/
22 as the default for the errors argument.

Đã thay đổi trong phiên bản 3.5: Chế độ

$ python -m tarfile -e monty.tar
7 (Tạo độc quyền) đã được thêm vào.The
$ python -m tarfile -e monty.tar
7 (exclusive creation) mode was added.

Thay đổi trong phiên bản 3.6: Tham số tên chấp nhận một đối tượng giống như đường dẫn.The name parameter accepts a path-like object.

classmethodtarfile.open (...) ¶ TarFile.open(...)

Nhà xây dựng thay thế. Hàm

import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
3 thực sự là một lối tắt của ClassMethod này.

Tarfile.getmember (tên) ¶getmember(name)

Trả về một đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 cho tên thành viên. Nếu không thể tìm thấy tên trong kho lưu trữ,
$ python -m tarfile -c monty.tar life-of-brian_1979/
26 sẽ được nêu ra.

Ghi chú

Nếu một thành viên xảy ra nhiều hơn một lần trong kho lưu trữ, sự xuất hiện cuối cùng của nó được coi là phiên bản cập nhật nhất.

Tarfile.getmembers () ¶getmembers()

Trả về các thành viên của kho lưu trữ dưới dạng danh sách các đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5. Danh sách có cùng thứ tự như các thành viên trong kho lưu trữ.

Tarfile.getnames ()getnames()

Trả lại các thành viên như một danh sách tên của họ. Nó có cùng thứ tự như danh sách được trả về bởi

$ python -m tarfile -c monty.tar life-of-brian_1979/
28.

Tarfile.list (verbose = true, *, thành viên = none) ¶list(verbose=True, *, members=None)

In một bảng nội dung thành

$ python -m tarfile -c monty.tar life-of-brian_1979/
29. Nếu dài dòng là
$ python -m tarfile -c monty.tar life-of-brian_1979/
08, chỉ có tên của các thành viên được in. Nếu đó là
import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7, đầu ra tương tự như LS -L được sản xuất. Nếu các thành viên tùy chọn được cung cấp, nó phải là một tập hợp con của danh sách được trả về bởi
$ python -m tarfile -c monty.tar life-of-brian_1979/
28.ls -l is produced. If optional members is given, it must be a subset of the list returned by
$ python -m tarfile -c monty.tar life-of-brian_1979/
28.

Đã thay đổi trong phiên bản 3.5: Đã thêm tham số thành viên.Added the members parameter.

Tarfile.next () ¶next()

Trả về thành viên tiếp theo của kho lưu trữ dưới dạng đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5, khi
$ python -m tarfile -c monty.tar life-of-brian_1979/
8 được mở để đọc. Trả lại
$ python -m tarfile -c monty.tar life-of-brian_1979/
35 nếu không còn nữa.

Trích xuất tất cả các thành viên từ kho lưu trữ đến thư mục làm việc hiện tại hoặc đường dẫn thư mục. Nếu các thành viên tùy chọn được cung cấp, nó phải là một tập hợp con của danh sách được trả về bởi

$ python -m tarfile -c monty.tar life-of-brian_1979/
28. Thông tin thư mục như chủ sở hữu, thời gian sửa đổi và quyền được đặt sau khi tất cả các thành viên đã được trích xuất. Điều này được thực hiện để giải quyết hai vấn đề: Thời gian sửa đổi thư mục được đặt lại mỗi khi một tệp được tạo trong đó. Và, nếu các quyền của thư mục không cho phép viết, trích xuất các tệp vào nó sẽ không thành công.

Nếu numeric_owner là

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7, các số UID và GID từ tarfile được sử dụng để đặt chủ sở hữu/nhóm cho các tệp được trích xuất. Mặt khác, các giá trị được đặt tên từ tarfile được sử dụng.

Cảnh báo

Không bao giờ trích xuất tài liệu lưu trữ từ các nguồn không tin cậy mà không kiểm tra trước. Có thể các tệp được tạo bên ngoài đường dẫn, ví dụ: Các thành viên có tên tệp tuyệt đối bắt đầu bằng

$ python -m tarfile -c monty.tar life-of-brian_1979/
38 hoặc tên tệp với hai dấu chấm
$ python -m tarfile -c monty.tar life-of-brian_1979/
39.

Đã thay đổi trong phiên bản 3.5: Đã thêm tham số numeric_owner.Added the numeric_owner parameter.

Thay đổi trong phiên bản 3.6: Tham số đường dẫn chấp nhận một đối tượng giống như đường dẫn.The path parameter accepts a path-like object.

Trích xuất một thành viên từ kho lưu trữ đến thư mục làm việc hiện tại, sử dụng tên đầy đủ của nó. Thông tin tệp của nó được trích xuất chính xác nhất có thể. Thành viên có thể là một tên tệp hoặc đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5. Bạn có thể chỉ định một thư mục khác nhau bằng đường dẫn. Đường dẫn có thể là một đối tượng giống như đường dẫn. Các thuộc tính tệp (chủ sở hữu, mtime, chế độ) được đặt trừ khi set_attrs là sai.path-like object. File attributes (owner, mtime, mode) are set unless set_attrs is false.

Nếu numeric_owner là

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7, các số UID và GID từ tarfile được sử dụng để đặt chủ sở hữu/nhóm cho các tệp được trích xuất. Mặt khác, các giá trị được đặt tên từ tarfile được sử dụng.

Ghi chú

Nếu một thành viên xảy ra nhiều hơn một lần trong kho lưu trữ, sự xuất hiện cuối cùng của nó được coi là phiên bản cập nhật nhất.

Tarfile.getmembers () ¶Added the set_attrs parameter.

Đã thay đổi trong phiên bản 3.5: Đã thêm tham số numeric_owner.Added the numeric_owner parameter.

Thay đổi trong phiên bản 3.6: Tham số đường dẫn chấp nhận một đối tượng giống như đường dẫn.The path parameter accepts a path-like object.

Trích xuất một thành viên từ kho lưu trữ đến thư mục làm việc hiện tại, sử dụng tên đầy đủ của nó. Thông tin tệp của nó được trích xuất chính xác nhất có thể. Thành viên có thể là một tên tệp hoặc đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5. Bạn có thể chỉ định một thư mục khác nhau bằng đường dẫn. Đường dẫn có thể là một đối tượng giống như đường dẫn. Các thuộc tính tệp (chủ sở hữu, mtime, chế độ) được đặt trừ khi set_attrs là sai.

Phương pháp
$ python -m tarfile -c monty.tar life-of-brian_1979/
42 không giải quyết một số vấn đề trích xuất. Trong hầu hết các trường hợp, bạn nên xem xét sử dụng phương pháp
$ python -m tarfile -c monty.tar life-of-brian_1979/
43.
add(name, arcname=None, recursive=True, *, filter=None)

Đã thay đổi trong phiên bản 3.2: Đã thêm tham số SET_ATTRS.Examples for an example.

Trích xuất một thành viên từ kho lưu trữ dưới dạng đối tượng tệp. Thành viên có thể là một tên tệp hoặc đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5. Nếu thành viên là một tệp thông thường hoặc liên kết, đối tượng
$ python -m tarfile -c monty.tar life-of-brian_1979/
45 sẽ được trả về. Đối với tất cả các thành viên hiện tại khác,
$ python -m tarfile -c monty.tar life-of-brian_1979/
35 được trả lại. Nếu thành viên không xuất hiện trong kho lưu trữ,
$ python -m tarfile -c monty.tar life-of-brian_1979/
26 sẽ được nâng lên.Added the filter parameter.

Tarfile.add (tên, arcName = none, recursive = true, *, filter = none) ¶Recursion adds entries in sorted order.

Thêm tên tệp vào kho lưu trữ. Tên có thể là bất kỳ loại tệp nào (thư mục, FIFO, liên kết tượng trưng, ​​v.v.). Nếu được đưa ra, ArcName chỉ định một tên thay thế cho tệp trong kho lưu trữ. Các thư mục được thêm vào đệ quy theo mặc định. Điều này có thể tránh được bằng cách đặt đệ quy thành
$ python -m tarfile -c monty.tar life-of-brian_1979/
08. Đệ quy thêm các mục theo thứ tự sắp xếp. Nếu bộ lọc được đưa ra, nó phải là một hàm có đối số đối tượng
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 và trả về đối tượng ____995 đã thay đổi. Thay vào đó, nếu nó trả về
$ python -m tarfile -c monty.tar life-of-brian_1979/
35 đối tượng
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 sẽ được loại trừ khỏi kho lưu trữ. Xem ví dụ cho một ví dụ.
addfile(tarinfo, fileobj=None)

Thêm đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 Tarinfo vào kho lưu trữ. Nếu FileObj được cung cấp, nó phải là một tệp nhị phân và
$ python -m tarfile -c monty.tar life-of-brian_1979/
54 byte được đọc từ nó và được thêm vào kho lưu trữ. Bạn có thể tạo các đối tượng
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 trực tiếp hoặc bằng cách sử dụng
$ python -m tarfile -c monty.tar life-of-brian_1979/
56.binary file, and
$ python -m tarfile -c monty.tar life-of-brian_1979/
54 bytes are read from it and added to the archive. You can create
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 objects directly, or by using
$ python -m tarfile -c monty.tar life-of-brian_1979/
56.

Tarfile.gettarinfo (name = none, arcName = none, fileObj = none) ¶gettarinfo(name=None, arcname=None, fileobj=None)

Tạo một đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 từ kết quả của
$ python -m tarfile -c monty.tar life-of-brian_1979/
58 hoặc tương đương trên một tệp hiện có. Tệp được đặt tên theo tên hoặc được chỉ định là một tệp tệp FileObj với bộ mô tả tệp. Tên có thể là một đối tượng giống như đường dẫn. Nếu được đưa ra, ArcName chỉ định một tên thay thế cho tệp trong kho lưu trữ, nếu không, tên được lấy từ thuộc tính FileObJ tựa ____998 hoặc đối số tên. Tên phải là một chuỗi văn bản.file object fileobj with a file descriptor. name may be a path-like object. If given, arcname specifies an alternative name for the file in the archive, otherwise, the name is taken from fileobj’s
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
8 attribute, or the name argument. The name should be a text string.

Bạn có thể sửa đổi một số thuộc tính ____ 95 trước khi bạn thêm nó bằng

$ python -m tarfile -c monty.tar life-of-brian_1979/
61. Nếu đối tượng tệp không phải là đối tượng tệp thông thường được định vị ở đầu tệp, các thuộc tính như
$ python -m tarfile -c monty.tar life-of-brian_1979/
62 có thể cần sửa đổi. Đây là trường hợp cho các đối tượng như
$ python -m tarfile -c monty.tar life-of-brian_1979/
63.
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
8 cũng có thể được sửa đổi, trong trường hợp arcName có thể là một chuỗi giả.

Thay đổi trong phiên bản 3.6: Tham số tên chấp nhận một đối tượng giống như đường dẫn.The name parameter accepts a path-like object.

Tarfile.close ()close()

Đóng

$ python -m tarfile -c monty.tar life-of-brian_1979/
8. Trong chế độ ghi, hai khối hoàn thiện không được nối vào kho lưu trữ.

Một từ điển chứa các cặp tiêu đề toàn cầu giá trị PAX.

Đối tượng Tarinfo

Một đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 đại diện cho một thành viên trong
$ python -m tarfile -c monty.tar life-of-brian_1979/
8. Ngoài việc lưu trữ tất cả các thuộc tính cần thiết của một tệp (như loại tệp, kích thước, thời gian, quyền, chủ sở hữu, v.v.), nó cung cấp một số phương pháp hữu ích để xác định loại của nó. Nó không chứa dữ liệu của tập tin.

Các đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 được trả về bằng các phương thức ____ 18 18
$ python -m tarfile -c monty.tar life-of-brian_1979/
70,
$ python -m tarfile -c monty.tar life-of-brian_1979/
28 và
$ python -m tarfile -c monty.tar life-of-brian_1979/
56.

classtarfile.tarinfo (name = '') ¶tarfile.TarInfo(name='')

Tạo một đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5.

ClassMethodTarInfo.Frombuf (BUF, mã hóa, lỗi) ¶TarInfo.frombuf(buf, encoding, errors)

Tạo và trả về một đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 từ bộ đệm chuỗi BUF.

Tăng

$ python -m tarfile -c monty.tar life-of-brian_1979/
75 nếu bộ đệm không hợp lệ.

classmethodtarinfo.fromtarfile (Tarfile) ¶ TarInfo.fromtarfile(tarfile)

Đọc thành viên tiếp theo từ đối tượng

$ python -m tarfile -c monty.tar life-of-brian_1979/
8 Tarfile và trả lại nó dưới dạng đối tượng
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5.

Tarinfo.tobuf (format = default_format, mã hóa = mã hóa, lỗi = 'SurrogateScape') ¶tobuf(format=DEFAULT_FORMAT, encoding=ENCODING, errors='surrogateescape')

Tạo một bộ đệm chuỗi từ một đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5. Để biết thông tin về các đối số, hãy xem hàm tạo của lớp
$ python -m tarfile -c monty.tar life-of-brian_1979/
8.

Đã thay đổi trong phiên bản 3.2: Sử dụng

$ python -m tarfile -c monty.tar life-of-brian_1979/
22 làm mặc định cho đối số lỗi.Use
$ python -m tarfile -c monty.tar life-of-brian_1979/
22 as the default for the errors argument.

Đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 có các thuộc tính dữ liệu công khai sau:

Tarinfo.name¶name

Tên của thành viên lưu trữ.

Tarinfo.size¶size

Kích thước trong byte.

Tarinfo.Mtime¶mtime

Thời gian sửa đổi cuối cùng.

Tarinfo.Mode¶mode

Bit cho phép.

Tarinfo.type¶type

Loại tệp. Loại thường là một trong những hằng số sau:

$ python -m tarfile -c monty.tar life-of-brian_1979/
82,
$ python -m tarfile -c monty.tar life-of-brian_1979/
83,
$ python -m tarfile -c monty.tar life-of-brian_1979/
84,
$ python -m tarfile -c monty.tar life-of-brian_1979/
85,
$ python -m tarfile -c monty.tar life-of-brian_1979/
86,
$ python -m tarfile -c monty.tar life-of-brian_1979/
87,
$ python -m tarfile -c monty.tar life-of-brian_1979/
88,
$ python -m tarfile -c monty.tar life-of-brian_1979/
89,
$ python -m tarfile -c monty.tar life-of-brian_1979/
90,
$ python -m tarfile -c monty.tar life-of-brian_1979/
91. Để xác định loại đối tượng
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 thuận tiện hơn, hãy sử dụng các phương thức
$ python -m tarfile -c monty.tar life-of-brian_1979/
93 bên dưới.

Tarinfo.linkname¶linkname

Tên của tên tệp đích, chỉ có trong các đối tượng ____95 loại

$ python -m tarfile -c monty.tar life-of-brian_1979/
84 và
$ python -m tarfile -c monty.tar life-of-brian_1979/
85.

Tarinfo.uid¶uid

ID người dùng của người dùng ban đầu lưu trữ thành viên này.

Tarinfo.gid¶gid

Nhóm ID của người dùng ban đầu lưu trữ thành viên này.

Tarinfo.uname¶uname

Tên tài khoản.

Tarinfo.gname¶gname

Tên nhóm.

Một từ điển chứa các cặp giá trị khóa của một tiêu đề mở rộng PAX liên quan.

Đối tượng

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
5 cũng cung cấp một số phương thức truy vấn thuận tiện:

Tarinfo.isfile () ¶isfile()

Trả về

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 Nếu đối tượng
$ python -m tarfile -c monty.tar life-of-brian_1979/
99 là một tệp thông thường.

Tarinfo.isreg ()isreg()

Giống như

$ python -m tarfile -e monty.tar
00.

Tarinfo.isdir ()isdir()

Trả về

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 nếu đó là một thư mục.

Tarinfo.issym () ¶issym()

Trả về

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 nếu đó là một liên kết tượng trưng.

Tarinfo.islnk ()islnk()

Trả về

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 nếu đó là một liên kết cứng.

Tarinfo.ischr ()ischr()

Trả về

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 nếu đó là một thiết bị ký tự.

Tarinfo.isblk ()isblk()

Trả về

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 nếu đó là một thiết bị khối.

Tarinfo.isfifo ()isfifo()

Trả lại

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 nếu đó là FIFO.

Tarinfo.isdev ()isdev()

Trả về

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()
7 Nếu đó là một trong những thiết bị ký tự, thiết bị chặn hoặc FIFO.

Giao diện dòng lệnh

Mới trong phiên bản 3.4.

Mô-đun

$ python -m tarfile -c monty.tar life-of-brian_1979/
1 cung cấp giao diện dòng lệnh đơn giản để tương tác với tài liệu lưu trữ TAR.

Nếu bạn muốn tạo một kho lưu trữ TAR mới, hãy chỉ định tên của nó sau tùy chọn

$ python -m tarfile -e monty.tar
09 và sau đó liệt kê (các) tên tệp nên được bao gồm:

$ python -m tarfile -c monty.tar  spam.txt eggs.txt

Vượt qua một thư mục cũng được chấp nhận:

$ python -m tarfile -c monty.tar life-of-brian_1979/

Nếu bạn muốn trích xuất một kho lưu trữ TAR vào thư mục hiện tại, hãy sử dụng tùy chọn

$ python -m tarfile -e monty.tar
10:

$ python -m tarfile -e monty.tar

Bạn cũng có thể trích xuất một kho lưu trữ TAR vào một thư mục khác bằng cách chuyển tên thư mục:

$ python -m tarfile -e monty.tar  other-dir/

Đối với danh sách các tệp trong kho lưu trữ TAR, hãy sử dụng tùy chọn

$ python -m tarfile -e monty.tar
11:

$ python -m tarfile -l monty.tar

Tùy chọn dòng lệnh mà

-L¶ - -List¶ --list

Liệt kê các tập tin trong một tarfile.

-c ... ¶ -tạo ra ... ¶ ... --create ...

Tạo Tarfile từ các tập tin nguồn.

-e [] []

Trích xuất Tarfile vào thư mục hiện tại nếu Output_DIR không được chỉ định.

-T¶ -Test¶ --test

Kiểm tra xem Tarfile có hợp lệ hay không.

-V,-Verbose¶, --verbose

Báo cáo dài dòng.

Ví dụ;

Cách trích xuất toàn bộ kho lưu trữ TAR vào thư mục làm việc hiện tại:

import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()

Cách trích xuất một tập hợp con của kho lưu trữ tar với

$ python -m tarfile -e monty.tar
12 bằng cách sử dụng hàm máy phát thay vì danh sách:

import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()

Cách tạo một kho lưu trữ TAR không nén từ danh sách các tên tệp:

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()

Ví dụ tương tự bằng cách sử dụng câu lệnh

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
7:

import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)

Cách đọc Lưu trữ TAR nén GZIP và hiển thị một số thông tin thành viên:

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()

Cách tạo kho lưu trữ và đặt lại thông tin người dùng bằng tham số bộ lọc trong

$ python -m tarfile -e monty.tar
14:

$ python -m tarfile -c monty.tar life-of-brian_1979/
0

Các định dạng tar được hỗ trợ

Có ba định dạng TAR có thể được tạo với mô -đun

$ python -m tarfile -c monty.tar life-of-brian_1979/
1:

  • POSIX.1-1988 Định dạng Ustar (

    $ python -m tarfile -c monty.tar life-of-brian_1979/
    
    04). Nó hỗ trợ các tên tệp lên tới một chiều dài tốt nhất 256 ký tự và liên kết lên đến 100 ký tự. Kích thước tệp tối đa là 8 Gib. Đây là một định dạng cũ và hạn chế nhưng được hỗ trợ rộng rãi.

  • Định dạng TAR GNU (

    import tarfile
    tar = tarfile.open("sample.tar.gz", "r:gz")
    for tarinfo in tar:
        print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
        if tarinfo.isreg():
            print("a regular file.")
        elif tarinfo.isdir():
            print("a directory.")
        else:
            print("something else.")
    tar.close()
    
    3). Nó hỗ trợ tên tệp dài và tên liên kết, các tệp lớn hơn 8 tệp Gib và thưa thớt. Đó là tiêu chuẩn thực tế trên các hệ thống GNU/Linux.
    $ python -m tarfile -c monty.tar life-of-brian_1979/
    
    1 Hỗ trợ đầy đủ các tiện ích mở rộng GNU TAR cho các tên dài, hỗ trợ tệp thưa thớt chỉ được đọc.

  • Định dạng PAX POSIX.1-2001 (

    import tarfile
    tar = tarfile.open("sample.tar.gz", "r:gz")
    for tarinfo in tar:
        print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
        if tarinfo.isreg():
            print("a regular file.")
        elif tarinfo.isdir():
            print("a directory.")
        else:
            print("something else.")
    tar.close()
    
    1). Nó là định dạng linh hoạt nhất với hầu như không có giới hạn. Nó hỗ trợ các tên tệp dài và tên liên kết, các tệp lớn và lưu trữ các tên đường dẫn một cách di động. Việc triển khai TAR hiện đại, bao gồm GNU TAR, BSDTAR/LIBARCHIVE và STAR, hỗ trợ đầy đủ các tính năng PAX mở rộng; Một số thư viện cũ hoặc không có gì có thể không, nhưng nên xử lý tài liệu lưu trữ PAX như thể chúng ở định dạng USTAR được hỗ trợ toàn cầu. Đây là định dạng mặc định hiện tại cho tài liệu lưu trữ mới.

    Nó mở rộng định dạng USTAR hiện có với các tiêu đề bổ sung cho thông tin không thể được lưu trữ khác. Có hai hương vị của các tiêu đề PAX: các tiêu đề mở rộng chỉ ảnh hưởng đến tiêu đề tệp tiếp theo, các tiêu đề toàn cầu có giá trị cho kho lưu trữ hoàn chỉnh và ảnh hưởng đến tất cả các tệp sau. Tất cả dữ liệu trong tiêu đề PAX được mã hóa trong UTF-8 vì lý do tính di động.

Có một số biến thể khác của định dạng TAR có thể được đọc, nhưng không được tạo ra:

  • Định dạng V7 cổ đại. Đây là định dạng TAR đầu tiên từ Unix Seventh Edition, chỉ lưu trữ các tệp và thư mục thông thường. Tên không được dài hơn 100 ký tự, không có thông tin tên người dùng/nhóm. Một số tài liệu lưu trữ có tổng kiểm tra tiêu đề được tính toán sai trong trường hợp các trường có các ký tự không phải ASCII.

  • Các định dạng mở rộng Sunos TAR. Định dạng này là một biến thể của định dạng PAX POSIX.1-2001, nhưng không tương thích.

Các vấn đề về Unicode

Định dạng TAR ban đầu được hình thành để tạo các bản sao lưu trên các ổ đĩa băng với trọng tâm chính là lưu giữ thông tin hệ thống tệp. Ngày nay, tài liệu lưu trữ TAR thường được sử dụng để phân phối tệp và trao đổi lưu trữ qua các mạng. Một vấn đề của định dạng gốc (là cơ sở của tất cả các định dạng khác) là không có khái niệm hỗ trợ mã hóa ký tự khác nhau. Ví dụ, một kho lưu trữ tar thông thường được tạo trên hệ thống UTF-8 không thể được đọc chính xác trên hệ thống Latin-1 nếu nó chứa các ký tự không phải ASCII. Siêu dữ liệu văn bản (như tên tệp, tên liên kết, tên người dùng/nhóm) sẽ xuất hiện bị hỏng. Thật không may, không có cách nào để tự động hóa mã hóa của một kho lưu trữ. Định dạng PAX được thiết kế để giải quyết vấn đề này. Nó lưu trữ siêu dữ liệu không ASCII bằng cách sử dụng mã hóa ký tự phổ quát UTF-8.

Các chi tiết chuyển đổi ký tự trong

$ python -m tarfile -c monty.tar life-of-brian_1979/
1 được kiểm soát bởi các đối số từ khóa mã hóa và lỗi của lớp
$ python -m tarfile -c monty.tar life-of-brian_1979/
8.

Mã hóa xác định mã hóa ký tự để sử dụng cho siêu dữ liệu trong kho lưu trữ. Giá trị mặc định là

import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)
9 hoặc
$ python -m tarfile -e monty.tar
23 dưới dạng dự phòng. Tùy thuộc vào việc lưu trữ được đọc hay viết, siêu dữ liệu phải được giải mã hoặc mã hóa. Nếu mã hóa không được đặt một cách thích hợp, chuyển đổi này có thể thất bại.

Đối số lỗi xác định cách các ký tự được đối xử không thể chuyển đổi. Các giá trị có thể được liệt kê trong phần xử lý lỗi. Sơ đồ mặc định là

$ python -m tarfile -c monty.tar life-of-brian_1979/
22 mà Python cũng sử dụng cho các cuộc gọi hệ thống tệp của mình, xem tên tệp, đối số dòng lệnh và các biến môi trường.Error Handlers. The default scheme is
$ python -m tarfile -c monty.tar life-of-brian_1979/
22 which Python also uses for its file system calls, see File Names, Command Line Arguments, and Environment Variables.

Đối với tài liệu lưu trữ

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()
1 (mặc định), mã hóa thường không cần thiết vì tất cả các siêu dữ liệu được lưu trữ bằng UTF-8. Mã hóa chỉ được sử dụng trong các trường hợp hiếm hoi khi các tiêu đề PAX nhị phân được giải mã hoặc khi các chuỗi có ký tự thay thế được lưu trữ.