PyPKM - Pokémon File Manipulation
PyPKM is a Python package for creating, editing, and manipulating individual Pokémon file data (commonly referred to as PKM or .pkm files). The goal of this project is to allow a cross-platform way to easily work with these files.
To install PyPKM, download and unarchive the package from its git repository.
Then, you can either
cd into the newly-created directory and run
python setup.py install to install in your global Python path, or you can
enter the directory and manually copy the
pypkm subdirectory to a place in
your Python path.
First, import the
Then, create or load a PKM file (making sure to specify the file's game generation):
# Create from scratch my_pkm = pypkm.new(gen=4) # Load from a file my_pkm = pypkm.load(gen=4, path='MyPokemon.pkm') # Load from data pkm_data = open('/path/to/MyPokemon.pkm', 'r').read() my_pkm = pypkm.load(gen=4, data=pkm_data)
From here, you can edit your Pokémon's data by calling attributes of the
my_pkm instance. For example, to give your Pokémon the Leftovers item to
my_pkm.item = 234
To teach your Pokémon the Roar of Time move:
my_pkm.move1 = 459
To see your Pokémon trainer's secret ID:
my_pkm.ot_secret_id # 65534
You might even want to change your Pokémon's species all together:
my_pkm.id = 94
As you can tell, you need to know the correct index number for most
editing. A proper API reference will be made available in time. Until then,
refer to the appropriate function's documentation in the
If you've edited the data, you probably want to save. If you've created the Pokémon from scratch or loaded directly from data and did not specify a path to save, you must do so now:
If you loaded data from a file and optionally do not specify a path, PyPKM will create a new file in the same directory as the old to avoid overwriting the old data:
my_pkm.save() # MyPokemon_new.pkm
If you'd like to contribute, you can do so at my git repository. I'd love to hear any bugs or feature requests you have.
Many thanks to the folks at Project Pokemon for all of their research into the structure of Pokémon data.
A big thanks to Stephen Anthony Uy for his pycrypto module. Somehow I
came across this module whilst looking for a way to encrypt and decrypt
Pokémon data, and it's been a huge help (the
shuffle() function comes
directly from his work).