从输入文件中提取分子式、分子式信息

  1 # -*- coding: utf-8 -*-
  2 """
  3 Created on Mon Jul 11 18:12:11 2016
  4
  5 @author: hugo
  6
  7 分析输入文件,提取分子式,分子量信息
  8 """
  9
 10 import os
 11 import linecache
 12 #import numpy
 13 #import sys
 14
 15 PeriodicTable = {‘H‘ : 1, ‘C‘ : 12, ‘O‘ : 16, ‘N‘ : 14, ‘F‘ : 19}
 16
 17
 18 def getFileName(path):
 19 #     获取指定目录下的所有指定后缀的文件名,并将文件名赋给filenamelist列表
 20
 21      filenamelist = []
 22      f_list = os.listdir(path)
 23      for i in f_list:
 24 #        os.path.splitext(): 分离文件名与扩展名
 25          if os.path.splitext(i)[1] == ‘.gjf‘:
 26 #             print i
 27              filenamelist.append(i)
 28
 29      return filenamelist
 30
 31
 32 if __name__ == ‘__main__‘:
 33     path = ‘.‘
 34     #getFileName(path)
 35
 36 # 写入文件名,分子式,分子量
 37 f = open(‘filename-formula-mass.txt‘, ‘a‘)
 38 f.truncate()                                     # 清空文件
 39 f.write(‘Filename‘)
 40 f.write(‘\t‘)
 41 f.write(‘\t‘)
 42 f.write(‘Molecular Formula‘)
 43 f.write(‘\t‘)
 44 f.write(‘Mass of Molecule‘)
 45 f.write(‘\n‘)
 46
 47 for filename in getFileName(path):
 48 #    print filename
 49     lines = linecache.getlines(filename)[9:]      # 读取filename第9行至末尾
 50 #    print lines
 51     lines2 = lines[:-2]                           # 去掉最后两个空行
 52
 53
 54     num_of_c = 0                                  # C原子个数
 55     num_of_h = 0                                  # H原子个数
 56     num_of_o = 0                                  # O原子个数
 57     num_of_n = 0                                  # N原子个数
 58     num_of_f = 0                                  # N原子个数
 59     mass_of_atom = 0                              # 原子质量
 60     mass_of_molecule = 0                          # 分子质量
 61
 62     for symbol_of_atom in lines2:
 63 #       symbol_of_atom[2]:每一行为一个str,读取str第二个字符,即为原子
 64         mass_of_atom = PeriodicTable[symbol_of_atom[2]]
 65         mass_of_molecule = mass_of_molecule + mass_of_atom
 66
 67         if symbol_of_atom[2] == ‘C‘:
 68             num_of_c = num_of_c + 1
 69         elif symbol_of_atom[2] == ‘H‘:
 70             num_of_h = num_of_h + 1
 71         elif symbol_of_atom[2] == ‘O‘:
 72             num_of_o = num_of_o + 1
 73         elif symbol_of_atom[2] == ‘N‘ :
 74             num_of_n = num_of_n + 1
 75         else:
 76             num_of_f = num_of_f + 1
 77
 78     # 分子式
 79     if num_of_f == 0:
 80         formula = ‘C‘ + str(num_of_c) + ‘H‘ + str(num_of_h) +  81                   ‘O‘ + str(num_of_o) + ‘N‘ + str(num_of_n)
 82     else:
 83         formula = ‘C‘ + str(num_of_c) + ‘H‘ + str(num_of_h) +  84                   ‘O‘ + str(num_of_o) + ‘N‘ + str(num_of_n) +  85                   ‘F‘ + str(num_of_f)
 86
 87 #    print formula
 88
 89     # 分子量
 90 #    print mass_of_molecule
 91     linecache.clearcache()
 92
 93     # 写入文件名,分子式,分子量
 94
 95     f.write(filename)
 96     f.write(‘\t‘)
 97     f.write(‘\t‘)
 98     f.write(formula)
 99     f.write(‘\t‘)
100     f.write(‘\t‘)
101     f.write(str(mass_of_molecule))
102     f.write(‘\n‘)
103 f.close()

输入文件例子:

%chk=sep1_c.chk
%mem=8GB
%nprocshared=8
#p nosymm Freq RB3LYP 6-31G(d)

N30:F398:A98:B98 bis-(2,2,2-trinitroethyl)-nitramine

0 1
N 0.050166 0.606549 0.111024
C -0.991352 -0.153881 0.759816
C -2.359635 -0.271483 0.040587
N -2.266367 -0.291738 -1.482893
O -1.713944 0.679205 -1.977460
O -2.729313 -1.259234 -2.061533
N -3.053844 -1.605171 0.444658
O -2.312353 -2.554503 0.637319
O -4.267284 -1.582700 0.492355
N -3.361456 0.825265 0.460123
O -3.970323 1.397169 -0.419621
O -3.464790 0.953113 1.667286
N -0.101221 2.000887 0.065310
O 0.778708 2.630096 -0.501944
O -1.102134 2.442779 0.611345
C 1.066123 0.033761 -0.743528
C 2.418849 -0.242480 -0.056897
N 3.024094 0.998601 0.606765
O 2.415534 1.388378 1.588008
O 4.019495 1.471328 0.093119
N 2.340188 -1.339446 1.017288
O 1.494052 -2.203660 0.811024
O 3.132751 -1.282849 1.932600
N 3.427657 -0.754862 -1.111580
O 3.311667 -0.266010 -2.222400
O 4.236583 -1.582004 -0.736132
H -0.617446 -1.170900 0.881856
H -1.206334 0.262848 1.746634
H 0.714386 -0.922014 -1.136239
H 1.261770 0.705098 -1.578729

时间: 2024-11-10 11:22:34

从输入文件中提取分子式、分子式信息的相关文章

python常用模块email----从原始邮件中提取邮件头信息

email.parser.Parser()的parsestr()和parse()方法都可以用来从原始邮件文件中提取邮件头信息.这两个方法的区别就parsestr处理的是字符串对象,parse处理的是文件对象.   让我们通过两个例子来了解这两个方法的使用.先来看一封邮件的原始信息的一部分: cat /tmp/email_test1.txt date: Wed, 16 Nov 2016 16:04:44 +0800 From: 3456789 <[email protected]> To: 12

手动实现如何从H264流中提取SPS/PPS信息

1,代码比较简单,可以直接用了.流的第一个NALU一定是SPS void get_sps_pps_nalu(uint8_t *data, int len, std::vector<uint8_t> &sps, std::vector<uint8_t> &pps) { const uint8_t* pkt_bgn = data; const uint8_t* pkt_end = pkt_bgn + len; const uint8_t* pbgn = pkt_bgn;

使用NPOI从Excel中提取图片及图片位置信息

原文:使用NPOI从Excel中提取图片及图片位置信息 问题背景: 话说,在ExcelReport的开发过程中,有一个比较棘手的问题:怎么复制图片呢? 当然,解决这个问题的第一步是:能使用NPOI提取到图片及图片的位置信息.到这里,一切想法都很顺利.但NPOI到底怎么提取图片及图片的位置信息呢?NPOI能不能提取到图片的位置信息呢? 这是两个问题.是两个让BaiGoogleDu几近沉默的问题.但官方教程的评论中还是流露出了答案的蛛丝马迹. 哇咔咔,这是我去看源码寻答案的的动力. 此处省去(N多字

第一个lucene程序,把一个信息写入到索引库中、根据关键词把对象从索引库中提取出来、lucene读写过程分析

新建一个Java Project :LunceneTest 准备lucene的jar包,要加入的jar包至少有: 1)lucene-core-3.1.0.jar     (核心包) 2) lucene-analyzers-3.1.0.jar    (分词器) 3) lucene-highlighter-3.1.0.jar    (高亮器) 4) lucene-memory-3.1.0.jar       (高亮器) 新建实体类:Article, 属性:id,title,content; gett

【BioCode】Elm格式中提取位点信息

说明: ①Elm格式: PLMD ID    Uniprot Accession    Position     Type     Sequence   Species    PMIDsPlMD编号 Uniprot数据库编号         位点 翻译后修饰类型 序列信息 物种 PMID PLMD-1   O00115     52     Ubiquitination  MIPLLLAALLCVPAGALTC Homo sapiens   21963094;23266961 ②代码说明:从上述

从MP3中提取歌曲信息

一首MP3歌曲除了音乐信息外,还包含了如歌名.演唱者等信息,当我们用winamp软件听音乐时,播放清单就自动将这些信息读出来.大部分人都喜欢从网上下载音乐,但下载下来的MP3文件名都是文件上传系统自动取名的,和歌曲本身根本不相符,所以,给用户带来了很大的麻烦.但是,懒人有懒人的做法,我们何不自己写一个程序,将歌曲信息自动读出来并为MP3文件自动更名呢? 下面我就以C#为工具,把开发过程写出来. 一首MP3的额外信息存放在文件的最后面,共占128个字节,其中包括以下的内容(我们定义一个结构说明):

在excel单元格中提取信息

平时在excel中处理数据的时候,肯定会遇到在单元格提取信息的情况,比如在地址中提取省.市.地区等,如果数据源内容规整的话,可以直接使用left().right().mid()等函数直接提取,但是大多数情况下,数据源的内容比较混乱,这时的就提取需要一些函数的组合,比如下面这种: 上图中是一些地址,我们看到大部分还是按照省.市.区来排列的,但是其中有一些格式并不统一,比如第6行,如何解决,首先我们需要一个辅助列,这个辅助列表就是你希望提取出来的内容,比如我想提取城市,我就弄一个存储城市名的辅助列,

如何用oracle从身份证信息中提取出生日期?

在项目开发中,有从身份证信息中提取出生日期的需求: 1.对18位身份证,因为有多个表,所以用到它们的关联,示例如下: update pfapperosoninformation  p set p.pbirthday  = to_date(substr(p.perqualinumber,7,8),'YYYY-MM-DD') where p.pfpeopleid = ( select max(s.personnel_id) from app_institutions_personnel s, pfa

python中提取位图信息(AttributeError: module &#39;struct&#39; has no attribute &#39;unstack&#39;)

前言 今天这篇博文有点意思,它是从一个例子出发,从而体现出在编程中的种种细节和一些知识点的运用.和从前一样,我是人,离成神还有几十万里,所以无可避免的出现不严谨的地方甚至错误,请酌情阅读. 0x00 首先,题目是:读取一个位图文件(xxx.bmp),然后读取前30个字节,从这前三十个字节中提取一些信息. 这里有一些知识要先知道:一个位图的前30位有什么? BMP格式采用小端方式存储数据,文件头的结构按顺序如下: 前两个字节:'BM'表示Windows位图,'BA'表示OS/2位图: 一个4字节整