解析文本文件中的文本块(由空行分隔的块)

parsing blocks of text within a text file (blocks separated by empty line)

我是一个全新的 Python 用户,想要解析如下所示的文本文件:

$ begin
$ vertex -1285.6 -226.2 -538.7 0
$ track 11 1000 0.7277 0.6765 0.1133 0
$ end

$ begin
$ vertex -1265.3 573.1 1547.7 0
$ track 11 1000 -0.7679 0.1650 0.6189 0
$ end

对于每个块($ begin ... $ end)我想得到顶点坐标 x y z:

$ begin
$ vertex x y z 0
$ track 11 1000 -0.7679 0.1650 0.6189 0
$ end

有人可以建议一种方法吗? 我非常感谢任何帮助或建议!

您可以在此处使用正则表达式。

patern = re.compile("\n\n")
print patern.split(content)

说明:这将在您的字符串中查找两个连续换行符的模式,并拆分为具有该模式的数组

例如:

   with open('data.txt', 'r') as myfile:
       str=myfile.read()
       #str="hello world \n line 1 \n line 2 \n\n line 3 line 4 \n line 5"
       print str
       patern = re.compile("\n\n")
       print patern.split(str)

结果: ['hello world \n line 1 \n line 2 ', '第3行第4行\n第5行']

假设您有一个名为 my file.txt 的文本文件,其中包含您的数据。 让我们为行中的每个项目添加标签:

marker = $
label = vertex OR track OR begin, etc
x = your x value
y = your y value
z = your z value
eol = the last value on the vertex line

当我们阅读每一行时,我们可以检查该行是否包含术语 'vertex'。

如果是这样,我们然后使用 split 函数拆分该行(默认情况下,split 将按空格拆分,但让我们明确指出我们要拆分的内容(即 ' ')。Split 生成一个列表元素数。

我们可以使用元组拆包将每个项目从列表中分离出来,并为它们分配单独的标签,以便我们的代码更具可读性。然后我们可以打印这些值。在您的情况下,您可能想要保存或处理这些值...只需将打印语句替换为您的处理代码即可。

file = open('myfile.txt')
for line in file:
    if 'vertex' in line:
        fields = line.split(' ')
        marker, tag, x, y, z, eol = fields
        print(x, y, z)
import csv

with open('data.txt','r') as f:
     text = f.readlines()
for line in text:
    if 'vertex' in line:
        fields = line.split(' ')
        print(fields[2],fields[3],fields[4]) 

短小精悍,一触即发re

import re
verticies = re.findall('$ vertex (\S+) (\S+) (\S+) 0', open('t.data').read())
print verticies

给出:

[('-1285.6', '-226.2', '-538.7'), ('-1265.3', '573.1', '1547.7')]