我在一个包含许多内容的通用文件中有一个特定的内容 block ,该文件是任意长的,可以包含任何字符,每行以空格开头,并且在某些文本文件中具有以下形式:
1\1\GINC-NODE9999\Scan\...
... ... ... ... ... ... ...
... ... ... ... ...\HF=-568
.8880019,-568.2343213, -568
.2343432, ... , -586.328492
1\RMSD=...
我对位于 \HF=
和 \RMSD=
之间的特定序列感兴趣。 我想将这些数字放入 Python 列表中。这个序列只是一系列以逗号分隔的数字,但是,这些数字可以滚动到第二行。另外,\HF=
和 \RMSD
可能会因滚动到换行符而被破坏。
当前的努力
我目前有以下内容:
with open(infile) as data:
d1 = []
start = '\\HF'
end = 'RMSD'
should_append = False
for line in data:
if start in line:
data = line[len(start):]
d1.append(data)
should_append=True
elif end in line:
should_append = False
break
elif should_append:
d1.append(line)
输出以下列表
['.6184082129,7.5129238742\\\\Version=EM64L-G09RevC.01\\
State=1-A\\HF=-568\n', ' .8880019,-568.8879907,-568.8879686,
-568.887937,-\n']
问题是我不仅在整个过程中都有换行符,而且我还保留了比应有的更多的数据。此外,滚动到其他行的数字在列表中都有自己的位置。我需要它看起来像
['-568.8880019', '-568.8879907', ... ]
最佳答案
多行非贪婪正则表达式可用于提取位于\HF= 和\RMSD= 之间的文本。提取文本后,应该很容易将其标记为组成数字
import re
import os
pattern = r'''\HF=(.*?)\RMSD='''
pat = re.compile(pattern, re.DOTALL)
for number in pat.finditer(open('file.txt').read()):
print number.group(1).replace(os.linesep, '').replace(' ', '').strip(r'''\\''')
...
-568 .8880019,-568.2343213, -568 .2343432, ... , -586.328492 1\
关于python - 将文件中的 block 解析到Python列表而不换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14524848/