====================================================== sgflib: Smart Game Format Parser Library & Utilities
For Python programmers, sgflib.py is a module containing a parser and classes for SGF, the Smart Game Format, specifically for the game of Go.
For Go players, several utilities are included:
-
sgfmerge: Merge two or more game record files into one. Works best when the game record files are for the same game, and contain variations.
-
sgfnorm: Normalize an SGF file. Usful for comparing two files representing the same game.
-
sgfsummary: Read, analyze, and summarize one or more SGF files.
You'll need the Python language itself, version 3.8 or higher, freely available from http://www.python.org.
The sgflib.tgz archive contains the following:
-
sgflib.py -- SGF Parser Library. Put this in a folder on Python's path.
-
sgfsummary, sgfnorm, sgfmerge -- Utility tools. Put these on your PATH.
-
README.txt -- Installation instructions (the file you're reading now).
-
test_sgflib.py & test_data/ -- Test suite. Requires pytest to run.
If you have any trouble running this code, if you find (maybe fix?) any bugs, or add any features, please contact_ the author.
-
Reimplement the GameTree as a data structure that's convenient for the user of sgflib, rather than following the file format.
-
Reimplement the Cursor class? Or remove it altogether if unnecessary.
-
Reimplement the parser?
-
Simplify. It works, but it seems clunky. Written early in my Python career.
-
Reimplement as a generator?
-
Support earlier versions of SGF?
-
-
Titler: Populate the title (GN/game_name property) inside the SGF file itself, e.g.:
player1 (2 dan, white) vs player2 (4 kyu, black +h5); W+18½; KGS; 2020-12-04
-
Renamer: Rename SGF files, e.g.:
2020-12-04 player1 · player2 +h5 W+18.sgf
-
Query SGF data: Extract game & node properties & comments from .sgf files. Queries could be Python expressions for maximum flexibility.
-
Handicap convertor? Lizzie (Leela Zero?) can't handle handicap stones, so this program would convert the HA[n] & AB[xx] tags to B[xx] moves & W[] passes. Katago via KaTrain doesn't have this problem though.
-
Auto-label variations.
Have any suggestions? Want to help? Please contact_ the author.
Project author: David Goodger <mailto:goodger@python.org>
_.
Go Tools Project website: http://gotools.sourceforge.net.