| 查看: 1137 | 回复: 3 | ||
李平lp2012铜虫 (小有名气)
|
[求助]
python提取信息求助 已有1人参与
|
|
请教一个问题,Gaussian计算的结果文件*.log, 想要从中提取信息,比如优化后的分子坐标。想法是,先定位最后一个优化的坐标的位置,然后再提取。定位的语言如下: block1=\'Standard orientation\' block2=\'Rotational constants\' with open(\'./1-1.log\') as f1: txt=f1.readlines() for line in txt: if line.find(block1) > -1: Loc=txt.index(line) print(Loc) 但现在有两个问题: (1)如果我定位的关键词是block1‘Standard orientation’,则以我的例子来说,并没有一行一行循环, 输出的的是第一次出现Standard orientation的位置;(533)为什么呢? (2)如果我定位的关键词是block2‘Rotational constants’,相同的程序,只是改为block2,则循环了,输出出现关键词的每一行的index,但是奇怪的是本来在1-1.log中有14个block2,但只最后输出的两个index相同,即并没有定位到最后一个出现block2的位置: 573 1522 2052 2620 3187 3755 4321 4887 5453 6019 6586 7153 7720 7720为什么呢? 还有就是相同的语言,为什么不同的关键字会出现以上情况呢? 附件是我上传的1-1.log文件 谢谢 |
» 本帖附件资源列表
-
欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com - 附件 1 : 1-1.log
2018-02-08 16:33:16, 572.76 K
» 猜你喜欢
有没有人能给点建议
已经有3人回复
假如你的研究生提出不合理要求
已经有12人回复
实验室接单子
已经有7人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
» 本主题相关商家推荐: (我也要在这里推广)
【答案】应助回帖
★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2018-02-11 16:54:03
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2018-02-11 16:54:03
|
你的代码的问题出现在求解Loc的语句,你的代码为 Loc=txt.index(line) 是在txt列表中寻找值为line的索引,而txt变量根据定义可以知道它是文件中的行数据,line变量根据for循环定义为txt列表中的值,你的Loc的计算语句计算的是你需要定位的关键词在文件的每行数据中的位置,并不是在全部文件中的位置,所以你求解block1的输出结果为14个533,而block2的输出结果为 573 1522 2052 2620 3187 3755 4321 4887 5453 6019 6586 7153 7720 7720 这14个数值,程序的输出是没有错误的, 根据你的意思你应该是要定位关键词在全部文章中的位置索引,我的理解,增加一个变量用来保存上面几行数据的长度,然后输出时将Loc加上这个长度就可以了。 |
2楼2018-02-10 10:53:18
李平lp2012
铜虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 20.5
- 散金: 36
- 帖子: 58
- 在线: 51小时
- 虫号: 1860435
- 注册: 2012-06-15
- 性别: MM
- 专业: 理论和计算化学
|
(1)对,我的目的是定位关键字所在的line number。txt的变量是文件中的行数据,是该列表的值;line变量应该是这个值中的字符; (2)Loc语句计算的并不是关键字在每行数据中的位置,这点是肯定的。因为(1)对于block1,533就是该关键字出现的line number-1, 而对于block2来说,数据就是该关键字每次出现的line number-1(2)我的计算是循环,所以关键字是每行出现的位置是一样的,而且比如block1值在该行中的位置也不是533.(可在log文件中验证)所以同样的循环结构,为什么两个不同关键字结果不同?而且我是做了for循环的,为什么像block1感觉是没有做循环呢? (3)如果我没定位关键字出现的位置,怎么计算该关键字出现前N行的长度呢? 谢谢 |
3楼2018-02-12 18:30:51
【答案】应助回帖
|
非常不好意思,我原来理解错了,实际上你第一个关键词的输出结果全部是533的原因是你的源文件中含有第一个关键词的几个line变量是相同的,而Loc=txt.index(line)这条语句只会返回找到的第一个值得索引,所以输出始终是533,第二个关键词最后两个得输出结果相同也是这个原因。举个例子:一个列表a=[1,2,3,4,5,1,2,6,1],则a.index(1)语句的输出结果为0,这个结果是固定的不管列表a中有几个数值1. 修改方法: 新增一个记录行数的变量(或者直接使用Loc这个变量) block1 = 'Standard orientation' block2 = 'Rotational constants' with open('./1-1.log') as f1: txt = f1.readlines() Loc=0 for line in txt: Loc += 1 if line.find(block1) > 0: print(Loc) 但是要记住这个得到的函数是从1开始数的,所以最后的print语句最好改为print(Loc-1) |
4楼2018-02-22 14:48:00












回复此楼