浅笑的读者和作家

pysmiles的Python项目详细描述


构建状态覆盖状态

pysmiles:轻量级的纯python smiles读写器

这是一个小项目,我开始,因为我找不到任何微笑读者或 易于安装的编写器(只读:python)。目前,作者是 非常基本,虽然它应该产生有效的微笑,但它们不会 漂亮。读卡器状态较好,应该可以使用。

微笑弦假定为 Opensmiles标准版

分子

分子被描述为网络x图。原子是 图和键是边。节点可以具有以下属性:

  • 元素:str。这描述了原子的元素。默认为"*" 意思是未知。
  • 芳香族:布尔。原子是否是(反)芳香系统的一部分。 默认为false。
  • 同位素:浮子。原子的质量。默认为未知。
  • hcount:int.附着在这个原子上的隐式氢的数目。 默认为0。
  • 电荷:int。这个原子的电荷。默认为0。
  • 类:int。这个原子的"类"。默认为0。

边具有以下属性:

  • 顺序:数字。债券订单。1.5用于芳香键。默认为1。

目前还没有指定立体化学信息的方法,而且 在阅读时被丢弃。在未来的某个地方 存储在节点的"立体声"属性中。

阅读微笑

函数read_smiles(smiles,explicit_hydrogen=false,zero_order_bonds=true,reinterpret_aromic=true)可用于分析 笑弦。它不应用于验证字符串是否有效 smiles string——这个函数很少验证你的smiles string是否具有化学意义。 被创造分子的边缘总是有一个"顺序" 属性。到目前为止,节点将具有相关属性 明确规定。元素未知的原子(*)将没有 元素属性。

  • 显式氢决定氢原子是否应该 在创建的分子中表示为显式节点,或在 "hcount"属性。
  • 零阶键确定微笑中的零阶键(.)是否 字符串将导致生成分子的边缘。
  • 重新解释芳香 重新解释,并根据构建的分子确定,或者 smiles string(小写)的芳香性规范 元素)应被视为主导。如果为真,则还将设置债券订单 对于不属于芳香环且具有键序的键,为1 1.5。如果错误,将仅使用中的信息创建分子 微笑的弦。

写微笑

函数可以是 用来写分子的微笑字符串。函数不检查 你的分子是否有化学意义。相反,它写着微笑 你提供的分子的表示,而不是其他的。

    <Li>default_element是用于没有 "元素"属性。
  • start是深度优先遍历的节点的键 起动。如果没有特别说明,就做些聪明的事。

附加功能

除了这两个核心功能外,还公开了另外四个功能 可以用最少的工作帮助生成与化学相关的分子。

  • 填充价(mol,尊重数=真,尊重键序=真,最大键序=3) 这个函数将通过 递增'hcount'和债券订单(如果指定)。注意,它确实 不使用"charge"属性来查找正确的价。
    • 重复计数:bool。是否可以覆盖现有的hcount。
    • 尊重债券订单:bool。是否可以更改债券订单
    • 最大绑定顺序:int.将设置的最大绑定顺序。
  • 添加显式氢(摩尔) 此函数转换隐式氢,由"hcount"指定 属性,到显式节点。
  • 除去显式氢(摩尔) 此函数与add_explicit_hydrogens相反:它将删除 显式氢节点并将其添加到相关的"hcount"属性中。
  • 正确的芳香环(摩尔) 这个函数标记分子中所有(反)芳香原子,并设置 (反)芳香原子之间的所有键的阶数为1.5。 它在尝试之前填充所有原子的价(另请参见填充价 找出哪些原子是芳香的。它的工作原理是首先找到所有 环中的原子。下一步,对每个环中的每个原子进行检查 原子是否是sp2杂化的(注意这是一个模糊的术语。 严格地说,我们检查它们的元素是否是可以 芳香,无论它们有2或3个键)。最后是 计算每个环的电子数,如果这是均匀的,环中的原子数 据说是芳香的。 这个函数是整个库中最脆弱的,我希望它 在某些情况下产生错误的答案。尤其是用于熔融(芳香族) 环系统(如吲哚)和带外环杂原子的环 (O=C1C=CC=C1)。买家当心。

示例

读数

frompysmilesimportread_smilessmiles='C1CC[13CH2]CC1C1CCCCC1'mol=read_smiles(smiles)print(mol.nodes(data='element'))# [(0, 'C'),#  (1, 'C'),#  (2, 'C'),#  (3, 'C'),#  (4, 'C'),#  (5, 'C'),#  (6, 'C'),#  (7, 'C'),#  (8, 'C'),#  (9, 'C'),#  (10, 'C'),#  (11, 'C')]print(mol.nodes(data='hcount'))# [(0, 2),#  (1, 2),#  (2, 2),#  (3, 2),#  (4, 2),#  (5, 1),#  (6, 1),#  (7, 2),#  (8, 2),#  (9, 2),#  (10, 2),#  (11, 2)]mol_with_H=read_smiles(smiles,explicit_hydrogen=True)print(mol_with_H.nodes(data='element'))# [(0, 'C'),#  (1, 'C'),#  (2, 'C'),#  (3, 'C'),#  (4, 'C'),#  (5, 'C'),#  (6, 'C'),#  (7, 'C'),#  (8, 'C'),#  (9, 'C'),#  (10, 'C'),#  (11, 'C'),#  (12, 'H'),#  (13, 'H'),#  (14, 'H'),#  (15, 'H'),#  (16, 'H'),#  (17, 'H'),#  (18, 'H'),#  (19, 'H'),#  (20, 'H'),#  (21, 'H'),#  (22, 'H'),#  (23, 'H'),#  (24, 'H'),#  (25, 'H'),#  (26, 'H'),#  (27, 'H'),#  (28, 'H'),#  (29, 'H'),#  (30, 'H'),#  (31, 'H'),#  (32, 'H'),# (33, 'H')]

写作

importnetworkxasnxfrompysmilesimportwrite_smiles,fill_valencemol=nx.Graph()mol.add_edges_from([(0,1),(1,2),(1,3),(3,4),(1,5),(3,6)])foridx,eleinenumerate('CCCCOCO'):mol.nodes[idx]['element']=elemol.nodes[4]['charge']=-1mol.nodes[4]['hcount']=0mol.edges[3,6]['order']=2print(write_smiles(mol))# [O-]C(=O)C([C])([C])[C]fill_valence(mol,respect_hcount=True)print(write_smiles(mol))# [O-]C(=O)C(C)(C)C

限制

  • 编写器生成不推荐的smiles字符串(根据opensmiles)。
  • 填充价不使用"电荷"来查找正确的价。
  • 正确的芳香环是易碎的。
  • 目前还没有办法指定立体化学信息。这个 解析器可以处理它,但它将被丢弃。
  • 它不在pypi上
  • 它只处理微笑。以后可能会扩展到Inchi,SLN, 智能等

要求

类似项目

有更多的python项目处理smiles,我试着列出 这里至少有一些。如果您的手机不见了,请随时打开PR。

  • pysmile:一个类似的命名项目, 能够编码/解码微笑格式的对象。不处理 微笑。
  • rdkit:化学信息和 机器学习软件,能读写微笑,仁智, 以及其他。
  • OpenEye化学工具包:OpenEye 化学工具包是化学和 化学信息学。它能处理(典型的)微笑和 英奇.

许可证

pysmiles是在apache 2.0许可下发布的。 版权所有2018 Peter C Kroon

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

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

推荐PyPI第三方库


热门话题
在Eclipse中使用多个调用在一行上打印java   javajackson序列化问题。只有同一实体的第一个对象可以很好地序列化   Java中Deflate函数的等价充气   使用customlitview的java Android actionbar搜索   java“<T>T get()”是什么意思?(它有用吗?)   目标c使用CommonCrypto使用AES256加密,使用OpenSSL或Java解密   java在运行时更新资源文件   fileinputstream在java中访问并将数据写入现有文件   带集群的java Android Mapbox我希望每个功能都有不同的标记图像   java JDK8>JDK10:PKIX路径生成失败:SunCertPathBuilderException:找不到请求目标的有效证书路径   java使用Hk2生成具有指定构造函数参数的实例   为什么这个系统。出来Java中的println()打印到控制台?   java目录和文件名连接不起作用   使用mockito和通配符绘图的java