如果我在文本文件中有数百个;
<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>
标记放入列表中?
答案 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]