从Python上的pgn文件中提取移动信息

时间:2011-06-28 19:27:39

标签: python chess

如何从Python上的pgn文件中提取移动信息?我是编程的新手,我们将不胜感激。

4 个答案:

答案 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文件的差异,每个网站在确切的格式上似乎略有不同。

  1. 有些.pgn将移动编号附加到移动本身(1.e4而不是1. e4)所以如果你标记字符串,你可以检查点的位置,因为它只出现在移动数字中

  2. 计算出您可以拥有的所有不同移动组合。如果移动是5个字符长,则可能是0-0-0(后翼城堡),Nge2 +(骑士从g到e2,带有支票(+)/将死(#)),Rexb5(Rook on e需要b5)。

  3. 移动最长的字符串可以是7个字符(当您必须指定原始等级和文件时,以及带有检查的捕获AND)。最短的是2个字符(pawn advance)。

  4. 提前计划施法和移动。您可能已经意识到,构建程序的方式并不容易适应它们。

  5. 开始时给出的详细信息(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中抢占下一个游戏。