使用 python-chess 从 PGN 文件中提取移动作为字符串
Extract Moves as Strings from PGN file Using python-chess
我正在使用模块 python-chess (https://python-chess.readthedocs.io/en/latest/index.html) to extract analyze 4 million chess games (http://caissabase.co.uk/).
如何将游戏的所有动作作为 strings 加载到列表中?这个想法是让我能够提取有关移动的信息。例如,女王吃掉了对手的棋子多少次?因此,我会在每个移动字符串中搜索“Qx”。我试过这个:
test = [] # list I wish to append moves to (as strings)
game = chess.pgn.read_game(pgn)
board = game.board()
for move in game.mainline_moves():
board.push(move)
test.append(board.san(move)) # this does not work and seems to cause the below error
以上代码产生以下错误:
AssertionError: san() and lan() expect move to be legal or null, but got g1f3 in rnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R b KQkq - 1 1
然而,没有 test.append(board.san(move))
的其余代码将所有游戏动作打印为字符串就好了。
非常感谢任何帮助。
board.san(move)
为您提供基于当前位置的移动符号(参见 documentation)。但是,您之前已经通过在棋盘上移动改变了头寸。因此它不承认第一个马移动 g1f3
是合法的:马已经在 f3!
我怀疑如果你交换循环中的两条线,它应该可以工作。也就是说,您首先需要写下这一步棋,然后再下棋(与实际下国际象棋有些不同;))
我正在使用模块 python-chess (https://python-chess.readthedocs.io/en/latest/index.html) to extract analyze 4 million chess games (http://caissabase.co.uk/).
如何将游戏的所有动作作为 strings 加载到列表中?这个想法是让我能够提取有关移动的信息。例如,女王吃掉了对手的棋子多少次?因此,我会在每个移动字符串中搜索“Qx”。我试过这个:
test = [] # list I wish to append moves to (as strings)
game = chess.pgn.read_game(pgn)
board = game.board()
for move in game.mainline_moves():
board.push(move)
test.append(board.san(move)) # this does not work and seems to cause the below error
以上代码产生以下错误:
AssertionError: san() and lan() expect move to be legal or null, but got g1f3 in rnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R b KQkq - 1 1
然而,没有 test.append(board.san(move))
的其余代码将所有游戏动作打印为字符串就好了。
非常感谢任何帮助。
board.san(move)
为您提供基于当前位置的移动符号(参见 documentation)。但是,您之前已经通过在棋盘上移动改变了头寸。因此它不承认第一个马移动 g1f3
是合法的:马已经在 f3!
我怀疑如果你交换循环中的两条线,它应该可以工作。也就是说,您首先需要写下这一步棋,然后再下棋(与实际下国际象棋有些不同;))