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.4.0.tar.gz (27.0 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.4.0-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pk2api-1.4.0.tar.gz
Algorithm Hash digest
SHA256 e0ab3d1acce41b7ce2302ff5b9f650f13d8111f3a411ba037f0f585d21cc4e23
MD5 836fc72719bbb02aee8166b92238a6f6
BLAKE2b-256 7f248e5c380c33d887e895ae9aea7cbe930d123bbd9ad3548da22386f49af2a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pk2api-1.4.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.4.0-py3-none-any.whl.

File metadata

  • Download URL: pk2api-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 28.1 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 645dae228b9d7583da4ed4fc05da16c88ede4cd8383cf3308bfd5656381a9196
MD5 c01a1f97a5d4cbe61914c3c68555e406
BLAKE2b-256 5ad0174e60bb4e1c04dc1445f73dabaa23675afaa9f3b8a63ffe2f064e25e592

See more details on using hashes here.

Provenance

The following attestation bundles were made for pk2api-1.4.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