pgn parser用于分析.pgn chess文件

pgn-parser的Python项目详细描述


pgn解析器

用于将pgn文件解析为python友好格式的python库。

解析器是用canopy构建的,其余的是python。

pgn规范基于saremba.de上的规范。

设置

安装

确保安装了python 3。

pip install pgn_parser

然后像这样导入:

from pgn_parser import pgn, parser

测试

这些测试是使用pytest和behave编写的,必须先安装它们:

pip install pytest behave

对于运行单元测试:

pytest

对于运行行为测试:

behave

建筑PIP可分配

make build

使用

分析pgn文件

要解析pgn,只需将字符串与actions()一起提供给parser.parse 解析器用来创建python结构的。

>>>frompgn_parserimportparser,pgn>>>game=parser.parse("1. e4 e5",actions=pgn.Actions())>>>print(game.move(1))1.e4e5>>>print(game.move(1).black.san)e5

游戏

在分析一个游戏之后,它将被构造成以下类 彼此嵌套:

游戏:整个游戏的容器 从游戏中获得特定移动(此处为5)

game.move(5)

检索moveText

game.movetext

访问标记对

game.tag_pairs

访问最终分数

game.score

moveText:所有移动的容器,例如“1”。C4 C5 2号。E4 E5英寸 它只是一个列表,因此可以遍历以检索移动。 请注意,moveText[0]将是解析的第一个移动,是否为1。或者31岁。所以 如果需要moveNumber,请使用game.move()

移动:移动是一个移动编号,可选为白色和/或黑色层

ply:是移动的单位,用标准代数表示法(san)。 例如,“1.E4 E5”中的黑色层是E5

标记对:所有标记对对象的有序字典。 它们是按顺序排列的,因此它保持读入的顺序,但将更改为 七标签花名册订单,如果打印/串。

标记对

要将有关游戏的元数据存储在标记对中,请执行此操作

pgn文件的头

["Site" "github.com"]

在python中是这样表示的

game.tag_pairs["Site'] == "github.com"

移动

每一步都有一个移动数和两层,白色和黑色。 每个层可以是任何内容,从空到有注释、变化和 nags

moves = "1. e4 $1 {a comment} (1.d5)"

表示如下:

m1=game.move(1)_assertm1.white.san=="e4"assertm1.white.comment=="a comment"assertm1.white.nags[0]=="$1"assertm1.white.variations[0].move(1).white.san=="d5"

如果一个层是空的,那么它的san将被表示为。

限制

不支持RAV风格的变化 在一个解析中不支持多个游戏,必须是单个游戏 不尝试分析周转时间,因为这不在原始规范中,我是 不知道该支持什么。

作者

  • brett bates-initial work-github

许可证

这个项目是在麻省理工学院的许可下授权的-详细信息请参见LICENSE.md文件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Apache Spark:使用sparksubmit比运行“单机版”慢3倍   macos错误/bin/sh:java:未找到命令   java Android Studio在尝试通过本地历史检索文件时崩溃   有没有办法从Java或Kotlin中读取Python pickle(test1.pickle)?   jacorb编译java类   用于cucumber测试、selenium测试和AEM的java SonarQube插件   java什么是SwingUtilities。你是做什么的?   java粒子系统   java为什么Switch case不能在普通类中工作?   java如何获取GridBagLayout的维度?   将java对象传递给js时Graalvm未知标识符   spring基于Java的配置版本是什么?   图中的“CPU”代表“核心”吗?   将java对象发送到rest Web服务   java如何使用Docx4j将字体更改为新段落?   正则表达式是在Java中执行大量字符串替换的最快方法   带toString的java Building 9x9   如何在cmd中运行java程序   java无法执行从Android应用程序到ASP的HTTPPost请求。NETWebAPI   java如何将数据从空活动传递到选项卡式活动?