python - 将文件中的 block 解析到Python列表而不换行

标签 python file-io python-2.7

我在一个包含许多内容的通用文件中有一个特定的内容 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/

相关文章:

python - 从 Numpy 数组获取 Pandas Dataframe 列名称

c# - 文件无法访问,因为它正在被另一个程序使用

python - 关于 python MRO 以及 super() 的行为

python - TensorFlow:如何重用 Adam 优化器变量?

python - 如何修改库的类以使其使用我对另一个库类的扩展?

Python:将每一行与字典中的值相加

c - 相同的文件,相同的文件大小,但两种不同的内存大小,为什么?

c++ - 使用 ifstream 读取列中随机生成数字的文本文件并从列表中找到最小值和最大值?

python-2.7 - Scrapy 使用代理并得到扭曲的错误

python - 如何消除相等运算符的 python3 弃用警告?