如何从Python上的pgn文件中提取移动信息?我是编程的新手,我们将不胜感激。
答案 0 :(得分:4)
试试pgnparser。
示例代码:
import pgn
import sys
f = open(sys.argv[1])
pgn_text = f.read()
f.close()
games = pgn.loads(pgn_text)
for game in games:
print game.moves
答案 1 :(得分:3)
我没有python的PGN解析器,但你可以从this place获得XCode的PGN解析器的源代码,这可能是有帮助的
答案 2 :(得分:2)
我不能给你任何特定于Python的指示,但我最近在java中写了一个PGN转换器,所以我会尝试提供一些建议。 Miku链接的主要缺点是网站不允许.pgn文件的差异,每个网站在确切的格式上似乎略有不同。
有些.pgn将移动编号附加到移动本身(1.e4而不是1. e4)所以如果你标记字符串,你可以检查点的位置,因为它只出现在移动数字中
计算出您可以拥有的所有不同移动组合。如果移动是5个字符长,则可能是0-0-0(后翼城堡),Nge2 +(骑士从g到e2,带有支票(+)/将死(#)),Rexb5(Rook on e需要b5)。
移动最长的字符串可以是7个字符(当您必须指定原始等级和文件时,以及带有检查的捕获AND)。最短的是2个字符(pawn advance)。
提前计划施法和移动。您可能已经意识到,构建程序的方式并不容易适应它们。
开始时给出的详细信息(ELO评级,位置等)因文件而异。
答案 3 :(得分:1)
@丹尼斯·戈洛马佐夫 我喜欢丹尼斯所做的事情。要补充他所做的事情,如果您想从一个png文件中的多个游戏中提取移动信息,例如像在国际象棋数据库png文件中的游戏中那样,请使用chess.pgn。
import chess.pgn
png_folder = open('sample.pgn')
current_game = chess.pgn.read_game(png_folder)
png_text = str(current_game.mainlines_moves())
read_game()方法充当迭代器,因此再次调用它将在pgn中抢占下一个游戏。