如何将文本文件中的某些文本行放入Python列表中?

时间:2014-03-29 17:48:19

标签: python list python-2.7 python-3.x

如果我在文本文件中有数百个;

<Vertex> 0 {
  -10.6272 8.71309 10.8633
  <UV> { 0.724203 0.210816 }
  <RGBA> { 0.916 0.609 0.439 1 }
}

如何让Python浏览文本文件并放入第二行; -10.6272 8.71309 10.8633;将每个<Vertex>标记放入列表中?

4 个答案:

答案 0 :(得分:3)

您可以使用正则表达式执行此操作:

>>> import re
>>> r = re.compile("^<Vertex>\s*\d+\s*{\s*([-\d. ]+)", re.MULTILINE)
>>> with open("filename") as fd:
>>>     matches = r.findall(fd.read())
>>> matches
['-10.6272 8.71309 10.8633', '-10.6272 8.71309 10.8633', ...]

答案 1 :(得分:0)

catch = False
mylist = []
with open("myfile.txt", "r") as f:
    content = f.readlines()
for line in content:
    if line.startswith("<Vertex>"):
        catch = True
        continue
    if catch:
        catch = False
        mylist.append(line)

这应该有用。

答案 2 :(得分:0)

如果你不担心文件的一致性,那就很容易了。

def readFile(path):
    f = open(path, 'r')
    return f.readlines()

def parseVertexes(lines):
    coordinates = []

    for index, line in enumerate(lines):
        if index % 5 == 1: #second line in vertex
            coordinates.append(line.split(" "))

我还没有完全测试过,但这应该有效。如果文件不一致,您将需要构建更多基础架构来处理案例。

答案 3 :(得分:0)

假设您的文件是这样的:

<Vertex> 0 {
  -10.6272 8.71309 10.8633
  <UV> { 0.724203 0.210816 }
  <RGBA> { 0.916 0.609 0.439 1 }
}
<Vertex> 0 {
  -10.6272 8.71309 10.8633
  <UV> { 0.724203 0.210816 }
  <RGBA> { 0.916 0.609 0.439 1 }
}
<Vertex> 0 {
  -10.6272 8.71309 10.8633
  <UV> { 0.724203 0.210816 }
  <RGBA> { 0.916 0.609 0.439 1 }
}

然后你可以从第二行开始,然后选择每一条第5行,使用字符串切片去除开头的空格,最后是新的行字符。

file = open("file.txt","r")
mylist = []
for l,line in enumerate(file):
    if (l - 1) % 5 == 0:
        mylist.append(line[2:-2])

file.close()

或者,作为一个班轮:

[line[2:-2] for l,line in enumerate(open("file.txt","r")) if (l - 1) % 5 == 0]