在Python上从pgn文件中提取移动信息
如何从 Python 上的 pgn 文件中提取移动信息?我是编程新手,任何帮助将不胜感激。
How do I go about extracting move information from a pgn file on Python? I'm new to programming and any help would be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
@丹尼斯·戈洛马佐夫
我喜欢丹尼斯上面所做的。为了补充他所做的事情,如果您想从 png 文件中的 1 个以上游戏中提取移动信息,例如象棋数据库 png 文件中的游戏,请使用 chess.pgn。
read_game() 方法充当迭代器,因此再次调用它将获取 pgn 中的下一个游戏。
@Dennis Golomazov
I like what Denis did above. To add on to what he did, if you want to extract move information from more than 1 game in a png file, say like in games in chess database png file, use chess.pgn.
read_game() method acts as an iterator so calling it again will grab the next game in the pgn.
我无法给你任何特定于 Python 的指导,但我最近用 java 编写了一个 PGN 转换器,所以我会尝试提供一些建议。 Miku 链接的主要缺点是该网站不允许 .pgn 文件存在差异,每个网站的确切格式似乎略有不同。
某些 .pgn 将棋步编号附加到棋步本身(1.e4 而不是 1.e4),因此如果您对字符串进行标记,则可以检查点的位置,因为它只出现在棋步编号中。
计算出您可以拥有的所有不同的移动组合。如果一步棋有 5 个字符长,则可能是 0-0-0(皇后城堡)、Nge2+(骑士从 g 到 e2,检查(+)/将死(#))、Rexb5(车在 e 上采取 b5)。
移动的最长字符串为 7 个字符(当您必须指定原始等级 AND 文件 AND 捕获 AND 带检查时)。最短的是 2 个字符(棋子前进)。
尽早计划易位和过路移动。您可能太晚才意识到您构建程序的方式不容易适应它们。
开头给出的详细信息(ELO 评级、位置等)因文件而异。
I can't give you any Python-specific directions, but I wrote a PGN converter recently in java, so I'll try offer some advice. The main disadvantage of Miku's link is the site doesn't allow for variance in .pgn files, which every site seems to vary slightly on the exact format.
Some .pgn have the move number attached to the move itself (1.e4 instead of 1. e4) so if you tokenise the string, you could check the placement of the dot since it only occurs in move numbers.
Work out all the different move combinations you can have. If a move is 5 characters long it could be 0-0-0 (queenside castles), Nge2+ (Knight from g to e2 with check(+)/ checkmate(#)), Rexb5 (Rook on e takes b5).
The longest string a move could be is 7 characters (for when you must specify origin rank AND file AND a capture AND with check). The shortest is 2 characters (a pawn advance).
Plan early for castling and en passant moves. You may realise too late that the way you have built your program doesn't easily adapt for them.
The details given at the start(ELO ratings, location, etc.) vary from file to file.
我没有适用于 python 的 PGN 解析器,但您可以从 这个地方 它可以提供帮助
I dont have PGN parser for python but You can get source code of PGN parser for XCode from this place it can be of assistance
尝试 pgnparser。
示例代码:
Try pgnparser.
Example code: