CLI

The fmsave command line: info, export and validate. Each block below is the real --help output of the command it follows.

fmsave

$ fmsave --help
usage: fmsave [-h] [--version] COMMAND ...

Read Football Manager 26 and supported 27 save files. fmsave never modifies a
save.

positional arguments:
  COMMAND
    info      show the game, build and in-game date of a save
    export    write one table of a save as CSV, JSON or JSON Lines
    validate  report how each reader fares on a save, without any names or
              uids

options:
  -h, --help  show this help message and exit
  --version   show program's version number and exit

fmsave info

$ fmsave info --help
usage: fmsave info [-h] [--show-name] [--json] SAVE

Show save metadata.

positional arguments:
  SAVE         path to a .fm save file

options:
  -h, --help   show this help message and exit
  --show-name  include the save's name, and with --json the save summary
               texts, which hold names (hidden by default)
  --json       print JSON instead of text

fmsave export

$ fmsave export --help
usage: fmsave export [-h] (--club VALUE | --managed-club |
                     --competition VALUE | --nation VALUE | --all)
                     [--format {csv,json,jsonl}] [--columns NAMES]
                     [--competition-names PATH] [-o PATH] [--strict]
                     SAVE TABLE

Write one table of a save. Choose exactly one scope: --club, --managed-club,
--competition, --nation or --all.

positional arguments:
  SAVE                  path to a .fm save file
  TABLE                 the table to write: players, contracts, suspensions,
                        clubs, managed-clubs, stages, competitions, nations,
                        fixtures, league-tables, transfer-windows,
                        competition-rules, player-match-stats, player-season-
                        stats, player-season-history, stadiums, finances,
                        sponsorships, facilities, affiliates, job-vacancies,
                        staff, staff-lists, injury-types, injuries, training,
                        mentoring, tactics, set-pieces, selections;
                        competition-rules (a rules block's competition is read
                        from the table stored after it, so --competition
                        returns only the blocks that link to one); player-
                        season-stats (a club or nation scope keeps its current
                        players, including their rows for other teams this
                        season); player-season-history (club and nation scopes
                        select players by current membership); training (only
                        the manager's own club has these, so any other club
                        returns no rows); mentoring (only the manager's own
                        club has these, so any other club returns no rows);
                        tactics (only the manager's own club has these, so any
                        other club returns no rows); set-pieces (only the
                        manager's own club has these, so any other club
                        returns no rows); selections (only the manager's own
                        club has these, so any other club returns no rows)

options:
  -h, --help            show this help message and exit
  --club VALUE          rows of one club, given as a club uid or a club name
                        or short name (any case)
  --managed-club        rows of the club the human manager runs
  --competition VALUE   rows of one competition, given as a competition id, or
                        as a name once --competition-names supplies one
  --nation VALUE        rows of one nation, by nation id
  --all                 every row
  --format {csv,json,jsonl}
                        output format (default: csv)
  --columns NAMES       comma-separated flat column names to write, in this
                        order
  --competition-names PATH
                        a UTF-8 CSV of database_id,name naming competitions,
                        which no save stores
  -o, --output PATH     write to this file instead of standard output
  --strict              stop rather than write when a reader's checks fail
                        (they warn by default)

fmsave validate

$ fmsave validate --help
usage: fmsave validate [-h] [--json] SAVE

Run every reader and report its checks, counts and coverage. The report holds
no names, uids or text from the save.

positional arguments:
  SAVE        path to a .fm save file

options:
  -h, --help  show this help message and exit
  --json      print JSON instead of text

player-season-history exports archived statistics. It accepts --club, --managed-club, --nation, or --all. Club and nation scopes use current player membership and retain the selected players’ archived rows for previous teams. See exporting for unconfirmed metadata and sparse imported counts.

When league-tables or injury-types writes no rows, export still exits 0 and prints a fmsave: note: line on standard error saying when that table is empty, such as before a division’s first match.