Skip to content

msclock/pybit7z

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pybit7z

A wrapper based on bit7z.

Documentation License SS Badge

CI CD Renovate Semantic Release codecov

Release PyPI PyPI - Python Version

pre-commit clang-format cmake-format codespell markdownlint shellcheck

Installation

Package-built has uploaded to pypi and just install with the command:

pip install pybit7z

Example

Extract Files from an Archive

import pybit7z

try:
    extractor = pybit7z.BitFileExtractor(pybit7z.FormatSevenZip)
    extractor.extract("path/to/archive.7z", "out/dir/")

    # Extracting a specific file inside an archive
    extractor.extract_matching("path/to/archive.7z", "file.pdf", "out/dir/")

    # Extracting the first file of an archive to a buffer
    buffer: bytes = extractor.extract("path/to/archive.7z")

    # Extracting an encrypted archive
    extractor.set_password("password")
    extractor.extract("path/to/another/archive.7z", "out/dir/")
except pybit7z.BitException as e:
    ... # handle the exception

Work on a single archive:

import pybit7z

try:
    # Opening the archive
     archive = pybit7z.BitArchiveReader("path/to/archive.gz", pybit7z.FormatGZip)

    # Testing the archive
    archive.test()

    # Extracting the archive
    archive.extract_to("out/dir/")
except pybit7z.BitException as e:
    ... # handle the exception

Compress Files into an Archive

import pybit7z

try:
    compressor = pybit7z.BitFileCompressor(pybit7z.FormatSevenZip)

    files = ["path/to/file1.jpg", "path/to/file2.pdf"]

    # Creating a simple zip archive
    compressor.compress(files, "output_archive.zip")

    # Creating a zip archive with a custom directory structure
    files_map: dict[str, str] = {
        "path/to/file1.jpg": "alias/path/file1.jpg",
        "path/to/file2.pdf": "alias/path/file2.pdf"
    }
    compressor.compress(files_map, "output_archive2.zip")

    # Compressing a directory
    compressor.compress_directory("dir/path/", "dir_archive.zip")

    # Creating an encrypted zip archive of two files
    compressor.set_password("password")
    compressor.compress_files(files, "protected_archive.zip")

    # Updating an existing zip archive
    compressor.set_update_mode(pybit7z.UpdateMode.Append)
    compressor.compress_files(files, "existing_archive.zip")

    # Compressing a single file into a buffer
    compressor2 = pybit7z.BitFileCompressor(pybit7z.FormatBZip2)
    buffer: bytes = compressor2.compress_file(files[0])
except pybit7z.BitException as e:
    ... # handle the exception

Work on a single archive:

import pybit7z

try:
    archive = pybit7z.BitArchiveWriter(pybit7z.FormatSevenZip)

    # Adding the items to be compressed (no compression is performed here)
    archive.add_file("path/to/file.txt")
    archive.add_directory("path/to/dir/")

    # Compressing the added items to the output archive
    archive.compress_to("output.7z")
except pybit7z.BitException as e:
    ... # handle the exception

Read Archive Metadata

import pybit7z

try:
    arc = pybit7z.BitArchiveReader("archive.7z", pybit7z.FormatSevenZip)

    # Printing archive metadata
    print("Archive properties:",
        "\n  Items count: "   , arc.items_count()
        "\n  Folders count: " , arc.folders_count()
        "\n  Files count: "   , arc.files_count()
        "\n  Size: "          , arc.size()
        "\n  Packed size: "   , arc.pack_size())

    # Printing the metadata of the archived items
    print("Archived items")
    for item in arc:
        print("    Item index: "    , item.index(),
            "\n    Name: "          , item.name(),
            "\n    Extension: "     , item.extension(),
            "\n    Path: "          , item.path(),
            "\n    IsDir: "         , item.is_dir(),
            "\n    Size: "          , item.size(),
            "\n    Packed size: "   , item.pack_size(),
            "\n    CRC: "           , item.crc())
except pybit7z.BitException as e:
    ... # handle the exception

A complete API reference is available in the documentation.

License

Apache Software License, for more details, see the LICENSE file.