从 txt 输出中解析多行

Parsing multiple lines from a txt output

我需要解析输出文件的一部分,如下所示(为清楚起见,还附上了图片)

y,mz) = (-.504D-04,-.543D-04,-.538D-03)








The expected output is : 
the code I have so far looks like below: 

class NACParser(解析部分): 名称=“联轴器”

很好,但有一些问题:

  1. 它只从最后一行开始打印,我认为这是因为它覆盖了类似的其他行。

  2. 此代码仅适用于该特定分子,我想要一些适用于任何分子的代码。我的意思是:在这个例子中——我有一个有 15 个原子的分子,第一个原子是 c(碳),第 5 个原子是 h(氢),第 11 个原子是 s(硫),但是原子总数(即目前是 15 ),当我有不同的分子时,原子的名称可以不同。

所以我想知道如何编写适用于通用分子的通用代码。有帮助吗?

这将完全符合您的要求。也许你可以以此为基础。当我找到带有“ATOM”的行时,我只是收集所有原子 ID,当我找到带有“d/d”的行时创建字典条目。我会显示输出,但我只是输入了伪造的数据,因为我不想重新输入所有这些。

import re
from pprint import pprint

header = r"(\d+ [a-z]{1,2})"

atoms = []
gather = {}
for line in open('x.txt'):
    if len(line) < 5:
        continue
    if 'ATOM' in line:
        atoms = re.findall( header, line )
        atoms = [s.replace(' ','') for s in atoms]
        continue
    if '/d' in line:
        parts = line.split()
        row = parts[0].replace('/','')
        for at,val in zip(atoms,parts[1:]):
            gather[at+'_'+row] = val
pprint(gather)

这是您的测试数据的输出。我希望您意识到剪切和粘贴数据与图像不符。图像使用d/dx,但剪切和粘贴使用dE/dx。我假设你也想要 dict 标签中的“E”,但如果你不这样做,那很容易解决。

{'10c_dEdx': '0.8337613D-02',
 '10c_dEdy': '-0.8171767D-01',
 '10c_dEdz': '-0.4316928D-02',
 '11s_dEdx': '0.3138990D-01',
 '11s_dEdy': '0.3893252D-01',
 '11s_dEdz': '0.2767787D-02',
 '12h_dEdx': '0.8416159D-02',
 '12h_dEdy': '0.3335059D-02',
 '12h_dEdz': '0.1357569D-01',
 '13h_dEdx': '0.1128067D-02',
 '13h_dEdy': '-0.1457401D-01',
 '13h_dEdz': '-0.7834375D-03',
 '14h_dEdx': '0.8941240D-02',
 '14h_dEdy': '0.4869915D-02',
 '14h_dEdz': '-0.1273530D-01',
 '15h_dEdx': '0.4292434D-03',
 '15h_dEdy': '-0.1418384D-01',
 '15h_dEdz': '-0.7764904D-03',
 '1c_dEdx': '-0.1150239D-01',
 '1c_dEdy': '0.4798462D-02',
 '1c_dEdz': '0.6015413D-05',
 '2c_dEdx': '0.2259669D-01',
 '2c_dEdy': '0.5902019D-01',
 '2c_dEdz': '0.3707704D-02',
 '3c_dEdx': '-0.3153006D-02',
 '3c_dEdy': '-0.4060517D-01',
 '3c_dEdz': '-0.2306249D-02',
 '4n_dEdx': '-0.2718508D-01',
 '4n_dEdy': '0.3404657D-01',
 '4n_dEdz': '0.1334956D-02',
 '5h_dEdx': '-0.1064344D-01',
 '5h_dEdy': '-0.1054522D-01',
 '5h_dEdz': '-0.8032586D-03',
 '6c_dEdx': '0.3017851D-01',
 '6c_dEdy': '-0.2805275D-01',
 '6c_dEdz': '-0.9413310D-03',
 '7s_dEdx': '-0.2253417D-01',
 '7s_dEdy': '0.1196856D-01',
 '7s_dEdz': '0.2069422D-03',
 '8n_dEdx': '-0.3195785D-01',
 '8n_dEdy': '0.1888257D-01',
 '8n_dEdz': '0.3914382D-03',
 '9h_dEdx': '-0.4441489D-02',
 '9h_dEdy': '0.1382483D-01',
 '9h_dEdz': '0.6724659D-03'}