Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python313/lib64/python3.13/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python313/lib64/python3.13/bz2.py
"""Interface to the libbzip2 compression library.

This module provides a file interface, classes for incremental
(de)compression, and functions for one-shot (de)compression.
"""

__all__ = ["BZ2File", "BZ2Compressor", "BZ2Decompressor",
           "open", "compress", "decompress"]

__author__ = "Nadeem Vawda <nadeem.vawda@gmail.com>"

from builtins import open as _builtin_open
import io
import os
import _compression

from _bz2 import BZ2Compressor, BZ2Decompressor


# Value 0 no longer used
_MODE_READ     = 1
# Value 2 no longer used
_MODE_WRITE    = 3


class BZ2File(_compression.BaseStream):

    """A file object providing transparent bzip2 (de)compression.

    A BZ2File can act as a wrapper for an existing file object, or refer
    directly to a named file on disk.

    Note that BZ2File provides a *binary* file interface - data read is
    returned as bytes, and data to be written should be given as bytes.
    """

    def __init__(self, filename, mode="r", *, compresslevel=9):
        """Open a bzip2-compressed file.

        If filename is a str, bytes, or PathLike object, it gives the
        name of the file to be opened. Otherwise, it should be a file
        object, which will be used to read or write the compressed data.

        mode can be 'r' for reading (default), 'w' for (over)writing,
        'x' for creating exclusively, or 'a' for appending. These can
        equivalently be given as 'rb', 'wb', 'xb', and 'ab'.

        If mode is 'w', 'x' or 'a', compresslevel can be a number between 1
        and 9 specifying the level of compression: 1 produces the least
        compression, and 9 (default) produces the most compression.

        If mode is 'r', the input file may be the concatenation of
        multiple compressed streams.
        """
        self._fp = None
        self._closefp = False
        self._mode = None

        if not (1 <= compresslevel <= 9):
            raise ValueError("compresslevel must be between 1 and 9")

        if mode in ("", "r", "rb"):
            mode = "rb"
            mode_code = _MODE_READ
        elif mode in ("w", "wb"):
            mode = "wb"
            mode_code = _MODE_WRITE
            self._compressor = BZ2Compressor(compresslevel)
        elif mode in ("x", "xb"):
            mode = "xb"
            mode_code = _MODE_WRITE
            self._compressor = BZ2Compressor(compresslevel)
        elif mode in ("a", "ab"):
            mode = "ab"
            mode_code = _MODE_WRITE
            self._compressor = BZ2Compressor(compresslevel)
        else:
            raise ValueError("Invalid mode: %r" % (mode,))

        if isinstance(filename, (str, bytes, os.PathLike)):
            self._fp = _builtin_open(filename, mode)
            self._closefp = True
            self._mode = mode_code
        elif hasattr(filename, "read") or hasattr(filename, "write"):
            self._fp = filename
            self._mode = mode_code
        else:
            raise TypeError("filename must be a str, bytes, file or PathLike object")

        if self._mode == _MODE_READ:
            raw = _compression.DecompressReader(self._fp,
                BZ2Decompressor, trailing_error=OSError)
            self._buffer = io.BufferedReader(raw)
        else:
            self._pos = 0

    def close(self):
        """Flush and close the file.

        May be called more than once without error. Once the file is
        closed, any other operation on it will raise a ValueError.
        """
        if self.closed:
            return
        try:
            if self._mode == _MODE_READ:
                self._buffer.close()
            elif self._mode == _MODE_WRITE:
                self._fp.write(self._compressor.flush())
                self._compressor = None
        finally:
            try:
                if self._closefp:
                    self._fp.close()
            finally:
                self._fp = None
                self._closefp = False
                self._buffer = None

    @property
    def closed(self):
        """True if this file is closed."""
        return self._fp is None

    @property
    def name(self):
        self._check_not_closed()
        return self._fp.name

    @property
    def mode(self):
        return 'wb' if self._mode == _MODE_WRITE else 'rb'

    def fileno(self):
        """Return the file descriptor for the underlying file."""
        self._check_not_closed()
        return self._fp.fileno()

    def seekable(self):
        """Return whether the file supports seeking."""
        return self.readable() and self._buffer.seekable()

    def readable(self):
        """Return whether the file was opened for reading."""
        self._check_not_closed()
        return self._mode == _MODE_READ

    def writable(self):
        """Return whether the file was opened for writing."""
        self._check_not_closed()
        return self._mode == _MODE_WRITE

    def peek(self, n=0):
        """Return buffered data without advancing the file position.

        Always returns at least one byte of data, unless at EOF.
        The exact number of bytes returned is unspecified.
        """
        self._check_can_read()
        # Relies on the undocumented fact that BufferedReader.peek()
        # always returns at least one byte (except at EOF), independent
        # of the value of n
        return self._buffer.peek(n)

    def read(self, size=-1):
        """Read up to size uncompressed bytes from the file.

        If size is negative or omitted, read until EOF is reached.
        Returns b'' if the file is already at EOF.
        """
        self._check_can_read()
        return self._buffer.read(size)

    def read1(self, size=-1):
        """Read up to size uncompressed bytes, while trying to avoid
        making multiple reads from the underlying stream. Reads up to a
        buffer's worth of data if size is negative.

        Returns b'' if the file is at EOF.
        """
        self._check_can_read()
        if size < 0:
            size = io.DEFAULT_BUFFER_SIZE
        return self._buffer.read1(size)

    def readinto(self, b):
        """Read bytes into b.

        Returns the number of bytes read (0 for EOF).
        """
        self._check_can_read()
        return self._buffer.readinto(b)

    def readline(self, size=-1):
        """Read a line of uncompressed bytes from the file.

        The terminating newline (if present) is retained. If size is
        non-negative, no more than size bytes will be read (in which
        case the line may be incomplete). Returns b'' if already at EOF.
        """
        if not isinstance(size, int):
            if not hasattr(size, "__index__"):
                raise TypeError("Integer argument expected")
            size = size.__index__()
        self._check_can_read()
        return self._buffer.readline(size)

    def readlines(self, size=-1):
        """Read a list of lines of uncompressed bytes from the file.

        size can be specified to control the number of lines read: no
        further lines will be read once the total size of the lines read
        so far equals or exceeds size.
        """
        if not isinstance(size, int):
            if not hasattr(size, "__index__"):
                raise TypeError("Integer argument expected")
            size = size.__index__()
        self._check_can_read()
        return self._buffer.readlines(size)

    def write(self, data):
        """Write a byte string to the file.

        Returns the number of uncompressed bytes written, which is
        always the length of data in bytes. Note that due to buffering,
        the file on disk may not reflect the data written until close()
        is called.
        """
        self._check_can_write()
        if isinstance(data, (bytes, bytearray)):
            length = len(data)
        else:
            # accept any data that supports the buffer protocol
            data = memoryview(data)
            length = data.nbytes

        compressed = self._compressor.compress(data)
        self._fp.write(compressed)
        self._pos += length
        return length

    def writelines(self, seq):
        """Write a sequence of byte strings to the file.

        Returns the number of uncompressed bytes written.
        seq can be any iterable yielding byte strings.

        Line separators are not added between the written byte strings.
        """
        return _compression.BaseStream.writelines(self, seq)

    def seek(self, offset, whence=io.SEEK_SET):
        """Change the file position.

        The new position is specified by offset, relative to the
        position indicated by whence. Values for whence are:

            0: start of stream (default); offset must not be negative
            1: current stream position
            2: end of stream; offset must not be positive

        Returns the new file position.

        Note that seeking is emulated, so depending on the parameters,
        this operation may be extremely slow.
        """
        self._check_can_seek()
        return self._buffer.seek(offset, whence)

    def tell(self):
        """Return the current file position."""
        self._check_not_closed()
        if self._mode == _MODE_READ:
            return self._buffer.tell()
        return self._pos


def open(filename, mode="rb", compresslevel=9,
         encoding=None, errors=None, newline=None):
    """Open a bzip2-compressed file in binary or text mode.

    The filename argument can be an actual filename (a str, bytes, or
    PathLike object), or an existing file object to read from or write
    to.

    The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or
    "ab" for binary mode, or "rt", "wt", "xt" or "at" for text mode.
    The default mode is "rb", and the default compresslevel is 9.

    For binary mode, this function is equivalent to the BZ2File
    constructor: BZ2File(filename, mode, compresslevel). In this case,
    the encoding, errors and newline arguments must not be provided.

    For text mode, a BZ2File object is created, and wrapped in an
    io.TextIOWrapper instance with the specified encoding, error
    handling behavior, and line ending(s).

    """
    if "t" in mode:
        if "b" in mode:
            raise ValueError("Invalid mode: %r" % (mode,))
    else:
        if encoding is not None:
            raise ValueError("Argument 'encoding' not supported in binary mode")
        if errors is not None:
            raise ValueError("Argument 'errors' not supported in binary mode")
        if newline is not None:
            raise ValueError("Argument 'newline' not supported in binary mode")

    bz_mode = mode.replace("t", "")
    binary_file = BZ2File(filename, bz_mode, compresslevel=compresslevel)

    if "t" in mode:
        encoding = io.text_encoding(encoding)
        return io.TextIOWrapper(binary_file, encoding, errors, newline)
    else:
        return binary_file


def compress(data, compresslevel=9):
    """Compress a block of data.

    compresslevel, if given, must be a number between 1 and 9.

    For incremental compression, use a BZ2Compressor object instead.
    """
    comp = BZ2Compressor(compresslevel)
    return comp.compress(data) + comp.flush()


def decompress(data):
    """Decompress a block of data.

    For incremental decompression, use a BZ2Decompressor object instead.
    """
    results = []
    while data:
        decomp = BZ2Decompressor()
        try:
            res = decomp.decompress(data)
        except OSError:
            if results:
                break  # Leftover data is not a valid bzip2 stream; ignore it.
            else:
                raise  # Error on the first iteration; bail out.
        results.append(res)
        if not decomp.eof:
            raise ValueError("Compressed data ended before the "
                             "end-of-stream marker was reached")
        data = decomp.unused_data
    return b"".join(results)
Name
Size
Permissions
Options
__pycache__
--
drwxr-xr-x
_pyrepl
--
drwxr-xr-x
asyncio
--
drwxr-xr-x
collections
--
drwxr-xr-x
concurrent
--
drwxr-xr-x
config-3.13-x86_64-linux-gnu
--
drwxr-xr-x
ctypes
--
drwxr-xr-x
curses
--
drwxr-xr-x
dbm
--
drwxr-xr-x
email
--
drwxr-xr-x
encodings
--
drwxr-xr-x
ensurepip
--
drwxr-xr-x
html
--
drwxr-xr-x
http
--
drwxr-xr-x
importlib
--
drwxr-xr-x
json
--
drwxr-xr-x
lib-dynload
--
drwxr-xr-x
logging
--
drwxr-xr-x
multiprocessing
--
drwxr-xr-x
pathlib
--
drwxr-xr-x
pydoc_data
--
drwxr-xr-x
re
--
drwxr-xr-x
site-packages
--
drwxr-xr-x
sqlite3
--
drwxr-xr-x
sysconfig
--
drwxr-xr-x
tomllib
--
drwxr-xr-x
unittest
--
drwxr-xr-x
urllib
--
drwxr-xr-x
venv
--
drwxr-xr-x
wsgiref
--
drwxr-xr-x
xml
--
drwxr-xr-x
xmlrpc
--
drwxr-xr-x
zipfile
--
drwxr-xr-x
zoneinfo
--
drwxr-xr-x
LICENSE.txt
13.485 KB
-rw-r--r--
__future__.py
5.096 KB
-rw-r--r--
__hello__.py
0.222 KB
-rw-r--r--
_aix_support.py
3.927 KB
-rw-r--r--
_android_support.py
6.733 KB
-rw-r--r--
_apple_support.py
2.203 KB
-rw-r--r--
_collections_abc.py
31.508 KB
-rw-r--r--
_colorize.py
2.781 KB
-rw-r--r--
_compat_pickle.py
8.53 KB
-rw-r--r--
_compression.py
5.548 KB
-rw-r--r--
_ios_support.py
2.609 KB
-rw-r--r--
_markupbase.py
14.31 KB
-rw-r--r--
_opcode_metadata.py
9.048 KB
-rw-r--r--
_osx_support.py
21.507 KB
-rw-r--r--
_py_abc.py
6.044 KB
-rw-r--r--
_pydatetime.py
89.834 KB
-rw-r--r--
_pydecimal.py
221.956 KB
-rw-r--r--
_pyio.py
91.497 KB
-rw-r--r--
_pylong.py
11.553 KB
-rw-r--r--
_sitebuiltins.py
3.055 KB
-rw-r--r--
_strptime.py
28.694 KB
-rw-r--r--
_sysconfigdata__linux_x86_64-linux-gnu.py
65.726 KB
-rw-r--r--
_sysconfigdata_d_linux_x86_64-linux-gnu.py
65.708 KB
-rw-r--r--
_threading_local.py
4.261 KB
-rw-r--r--
_weakrefset.py
5.755 KB
-rw-r--r--
abc.py
6.385 KB
-rw-r--r--
antigravity.py
0.488 KB
-rw-r--r--
argparse.py
99.278 KB
-rw-r--r--
ast.py
63.808 KB
-rw-r--r--
base64.py
21.136 KB
-rwxr-xr-x
bdb.py
34.515 KB
-rw-r--r--
bisect.py
3.343 KB
-rw-r--r--
bz2.py
11.688 KB
-rw-r--r--
cProfile.py
6.481 KB
-rwxr-xr-x
calendar.py
25.466 KB
-rw-r--r--
cmd.py
14.957 KB
-rw-r--r--
code.py
12.861 KB
-rw-r--r--
codecs.py
36.063 KB
-rw-r--r--
codeop.py
5.691 KB
-rw-r--r--
colorsys.py
3.967 KB
-rw-r--r--
compileall.py
20.181 KB
-rw-r--r--
configparser.py
52.569 KB
-rw-r--r--
contextlib.py
27.149 KB
-rw-r--r--
contextvars.py
0.126 KB
-rw-r--r--
copy.py
8.765 KB
-rw-r--r--
copyreg.py
7.436 KB
-rw-r--r--
csv.py
18.729 KB
-rw-r--r--
dataclasses.py
63.032 KB
-rw-r--r--
datetime.py
0.262 KB
-rw-r--r--
decimal.py
2.732 KB
-rw-r--r--
difflib.py
81.414 KB
-rw-r--r--
dis.py
40.002 KB
-rw-r--r--
doctest.py
106.771 KB
-rw-r--r--
enum.py
83.572 KB
-rw-r--r--
filecmp.py
10.402 KB
-rw-r--r--
fileinput.py
15.349 KB
-rw-r--r--
fnmatch.py
6.035 KB
-rw-r--r--
fractions.py
39.083 KB
-rw-r--r--
ftplib.py
33.921 KB
-rw-r--r--
functools.py
38.206 KB
-rw-r--r--
genericpath.py
6.101 KB
-rw-r--r--
getopt.py
7.313 KB
-rw-r--r--
getpass.py
6.087 KB
-rw-r--r--
gettext.py
21.029 KB
-rw-r--r--
glob.py
19.258 KB
-rw-r--r--
graphlib.py
9.422 KB
-rw-r--r--
gzip.py
24.056 KB
-rw-r--r--
hashlib.py
9.225 KB
-rw-r--r--
heapq.py
22.484 KB
-rw-r--r--
hmac.py
7.535 KB
-rw-r--r--
imaplib.py
52.773 KB
-rw-r--r--
inspect.py
125.27 KB
-rw-r--r--
io.py
3.498 KB
-rw-r--r--
ipaddress.py
79.722 KB
-rw-r--r--
keyword.py
1.048 KB
-rw-r--r--
linecache.py
7.113 KB
-rw-r--r--
locale.py
77.181 KB
-rw-r--r--
lzma.py
13.085 KB
-rw-r--r--
mailbox.py
79.73 KB
-rw-r--r--
mimetypes.py
23.292 KB
-rw-r--r--
modulefinder.py
23.234 KB
-rw-r--r--
netrc.py
6.76 KB
-rw-r--r--
ntpath.py
32.037 KB
-rw-r--r--
nturl2path.py
2.318 KB
-rw-r--r--
numbers.py
11.198 KB
-rw-r--r--
opcode.py
2.759 KB
-rw-r--r--
operator.py
10.723 KB
-rw-r--r--
optparse.py
58.954 KB
-rw-r--r--
os.py
40.659 KB
-rw-r--r--
pdb.py
88.807 KB
-rwxr-xr-x
pickle.py
65.388 KB
-rw-r--r--
pickletools.py
91.848 KB
-rw-r--r--
pkgutil.py
17.853 KB
-rw-r--r--
platform.py
46.249 KB
-rwxr-xr-x
plistlib.py
29.096 KB
-rw-r--r--
poplib.py
14.262 KB
-rw-r--r--
posixpath.py
17.93 KB
-rw-r--r--
pprint.py
23.592 KB
-rw-r--r--
profile.py
22.61 KB
-rwxr-xr-x
pstats.py
28.609 KB
-rw-r--r--
pty.py
5.993 KB
-rw-r--r--
py_compile.py
7.653 KB
-rw-r--r--
pyclbr.py
11.129 KB
-rw-r--r--
pydoc.py
107.498 KB
-rwxr-xr-x
queue.py
13.165 KB
-rw-r--r--
quopri.py
7.028 KB
-rwxr-xr-x
random.py
36.139 KB
-rw-r--r--
reprlib.py
7.023 KB
-rw-r--r--
rlcompleter.py
7.732 KB
-rw-r--r--
runpy.py
12.583 KB
-rw-r--r--
sched.py
6.202 KB
-rw-r--r--
secrets.py
1.938 KB
-rw-r--r--
selectors.py
19.001 KB
-rw-r--r--
shelve.py
8.604 KB
-rw-r--r--
shlex.py
13.04 KB
-rw-r--r--
shutil.py
56.116 KB
-rw-r--r--
signal.py
2.437 KB
-rw-r--r--
site.py
24.969 KB
-rw-r--r--
smtplib.py
42.524 KB
-rwxr-xr-x
socket.py
36.874 KB
-rw-r--r--
socketserver.py
27.407 KB
-rw-r--r--
sre_compile.py
0.226 KB
-rw-r--r--
sre_constants.py
0.227 KB
-rw-r--r--
sre_parse.py
0.224 KB
-rw-r--r--
ssl.py
51.471 KB
-rw-r--r--
stat.py
6.003 KB
-rw-r--r--
statistics.py
60.382 KB
-rw-r--r--
string.py
11.51 KB
-rw-r--r--
stringprep.py
12.614 KB
-rw-r--r--
struct.py
0.251 KB
-rw-r--r--
subprocess.py
87.389 KB
-rw-r--r--
symtable.py
13.874 KB
-rw-r--r--
tabnanny.py
11.274 KB
-rwxr-xr-x
tarfile.py
111.421 KB
-rwxr-xr-x
tempfile.py
31.607 KB
-rw-r--r--
textwrap.py
19.472 KB
-rw-r--r--
this.py
0.979 KB
-rw-r--r--
threading.py
53.949 KB
-rw-r--r--
timeit.py
13.161 KB
-rwxr-xr-x
token.py
2.431 KB
-rw-r--r--
tokenize.py
21.063 KB
-rw-r--r--
trace.py
29.031 KB
-rwxr-xr-x
traceback.py
64.965 KB
-rw-r--r--
tracemalloc.py
17.624 KB
-rw-r--r--
tty.py
1.987 KB
-rw-r--r--
types.py
10.944 KB
-rw-r--r--
typing.py
129.607 KB
-rw-r--r--
uuid.py
28.458 KB
-rw-r--r--
warnings.py
26.316 KB
-rw-r--r--
wave.py
22.691 KB
-rw-r--r--
weakref.py
21.009 KB
-rw-r--r--
webbrowser.py
23.729 KB
-rwxr-xr-x
zipapp.py
8.416 KB
-rw-r--r--
zipimport.py
32.119 KB
-rw-r--r--