如果我有很多这样的文本文件
<Vertex> 0 {
-0.597976 -6.85293 8.10038
<UV> { 0.898721 0.149503 }
<RGBA> { 0.92549 0.92549 0.92549 1 }
}
...
<Vertex> 1507 {
12 -5.3146 -0.000708352
<UV> { 5.7487 0.180395 }
<RGBA> { 0.815686 0.815686 0.815686 1 }
}
如何通读文本文件并在第二行的第一个数字上加25?(-0.597976
中的Vertex 0
)
我尝试过用.split(' ')
在每个空格处拆分第二行的文本,然后在第三个元素上使用float()
,并添加25,但我不知道如何在文本文件中隐式地选择该行。在
如果垂直线总是在后一行,你可以把它作为标记,然后读下一行。如果您读取第二行
.strip()
前导和尾随空格,然后按空格字符.split()
,您将得到三个垂直的列表,如下所示(假设您已将该行读入字符串变量line
:现在怎么办?对列表中的第一项调用^{} ,然后在结果中添加25。在
这里真正的挑战是找到
<Vertex>
标记并读取下一行。这看起来像是家庭作业,所以我让你先把它弄明白!在以“<;开头,例如:
或者如果从文件中读取数据:
^{pr2}$困难的方法是使用pythonlex/Yacc工具。 你以为“最难”吗方法是创建一个自定义函数来识别标记(标记将是<;Vertex>;、数字、大括号,<;UV>;和<;RGBA>;标记分隔符将是空格)。在
很抱歉,如果你不能保证参赛作品尊重CR和LFs的话,你要求的是一种迷你语言。在
又一个丑陋的(甚至更难!)方法是,因为在这种迷你语言中不使用递归,所以使用regex。但是regex解决方案在相同的方式和数量上会是又长又丑的(相信我:真的很长)。在
尝试使用这个库:Python Lex/Yacc因为您需要的是解析一种语言,即使可以在这里使用regex,也会以一个难看且无法维护的语言结束。你必须学习语言解析的技巧才能使用它。看看Here
相关问题 更多 >
编程相关推荐