Skip to main content

Python library to read and write Silkroad Online PK2 files

Project description

PK2API

Based on: https://github.com/JellyBitz/JMX-File-Editor

Python library to read and write data into the PK2 file format from Silkroad Online.

Features

  • Fast search O(1)
  • Create new PK2 files
  • Create new paths recursively if does not exist
  • Full read/write support

Installation

pip install pk2api

Or install from source:

pip install -e .

Usage

from pk2api import Pk2Stream

key = "169841"  # Default SRO key

# Read-only mode
with Pk2Stream("/path/to/Media.pk2", key, read_only=True) as pk2:
    # Get file content
    file = pk2.get_file("Type.txt")
    if file:
        content = file.get_content()
        print(content.decode("utf-8"))

    # List files from root folder
    root = pk2.get_folder("")
    print("Files:")
    for path in root.files.keys():
        print(f" - {path}")

    # List folders from root folder
    print("Folders:")
    for path in root.folders.keys():
        print(f" - {path}")

# Read-write mode
with Pk2Stream("/path/to/Media.pk2", key) as pk2:
    # Add & remove folder
    pk2.add_folder("test/new_folder")
    pk2.remove_folder("test/new_folder")

    # Add & remove file
    pk2.add_file("test/new_file.txt", b"Hello World")
    pk2.remove_file("test/new_file.txt")

API Reference

Pk2Stream

Main class for reading and writing PK2 archives.

Pk2Stream(path: str, key: str, read_only: bool = False)

Methods:

  • get_folder(path: str) -> Pk2Folder | None - Get folder by path
  • get_file(path: str) -> Pk2File | None - Get file by path
  • add_folder(path: str) -> bool - Create folder (recursive)
  • add_file(path: str, data: bytes) -> bool - Add or update file
  • remove_folder(path: str) -> bool - Remove folder and contents
  • remove_file(path: str) -> bool - Remove file
  • close() - Close the stream

Pk2Folder

Represents a folder within a PK2 archive.

Properties:

  • name: str - Folder name
  • parent: Pk2Folder | None - Parent folder
  • offset: int - Byte offset in stream
  • files: dict[str, Pk2File] - Files in this folder
  • folders: dict[str, Pk2Folder] - Subfolders

Methods:

  • get_full_path() -> str - Get full path from root

Pk2File

Represents a file within a PK2 archive.

Properties:

  • name: str - File name
  • parent: Pk2Folder - Parent folder
  • offset: int - Byte offset in stream
  • size: int - File size in bytes

Methods:

  • get_full_path() -> str - Get full path from root
  • get_content() -> bytes - Read file content

Known Issues

  • New folder/file names are saved in lowercase

Requirements

  • Python 3.10+

Special Thanks!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pk2api-1.3.0.tar.gz (26.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pk2api-1.3.0-py3-none-any.whl (27.9 kB view details)

Uploaded Python 3

File details

Details for the file pk2api-1.3.0.tar.gz.

File metadata

  • Download URL: pk2api-1.3.0.tar.gz
  • Upload date:
  • Size: 26.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pk2api-1.3.0.tar.gz
Algorithm Hash digest
SHA256 79c8423849a76f15ef2ced26291a012d9724b69deb63549f5ca2b9833cd21f73
MD5 421db78f627d367d7908b428e65fbdd1
BLAKE2b-256 fdc45b863ea6321e93ba3d4af132ef08b24cdb23a52ce187ce5a9a0b9a743f27

See more details on using hashes here.

Provenance

The following attestation bundles were made for pk2api-1.3.0.tar.gz:

Publisher: publish.yml on dadav/pk2api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pk2api-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: pk2api-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 27.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pk2api-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4dbfef30791668312004144b7537ace151115c05b44ad7a2fca7052630333b13
MD5 d014ff19edb952bd1c442f29acb3106e
BLAKE2b-256 bfc3cb2d6124f19ca7c288dc327f8dbd9a3f094bb54fa2f70557f9f7a703acbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pk2api-1.3.0-py3-none-any.whl:

Publisher: publish.yml on dadav/pk2api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page