如何读取文本文件并替换数字?

2024-04-29 01:10:46 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有很多这样的文本文件

<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,但我不知道如何在文本文件中隐式地选择该行。在


Tags: 文本元素数字floatuvsplitvertex空格
3条回答

如果垂直线总是在后一行,你可以把它作为标记,然后读下一行。如果您读取第二行.strip()前导和尾随空格,然后按空格字符.split(),您将得到三个垂直的列表,如下所示(假设您已将该行读入字符串变量line

>>> line = line.strip()
>>> verticies = line.split(' ')
>>> verticies 
    ['-0.597976', '-6.85293', '8.10038']

现在怎么办?对列表中的第一项调用^{},然后在结果中添加25。在

这里真正的挑战是找到<Vertex>标记并读取下一行。这看起来像是家庭作业,所以我让你先把它弄明白!在

以“<;开头,例如:

L=["<Vertex> 0 {",
   "-0.597976 -6.85293 8.10038",
   "<UV> { 0.898721 0.149503 }",
   "<RGBA> { 0.92549 0.92549 0.92549 1 }"
   ]

for l in L:
    if not l.startswith("<"):
        print l.split(' ')[0]

或者如果从文件中读取数据:

^{pr2}$

困难的方法是使用pythonlex/Yacc工具。 你以为“最难”吗方法是创建一个自定义函数来识别标记(标记将是<;Vertex>;、数字、大括号,<;UV>;和<;RGBA>;标记分隔符将是空格)。在

很抱歉,如果你不能保证参赛作品尊重CR和LFs的话,你要求的是一种迷你语言。在

又一个丑陋的(甚至更难!)方法是,因为在这种迷你语言中不使用递归,所以使用regex。但是regex解决方案在相同的方式和数量上会是又长又丑的(相信我:真的很长)。在

尝试使用这个库:Python Lex/Yacc因为您需要的是解析一种语言,即使可以在这里使用regex,也会以一个难看且无法维护的语言结束。你必须学习语言解析的技巧才能使用它。看看Here

相关问题 更多 >