0

我很难理解如何从 Pymel 中的复杂文本文件中提取浮点值。我不是程序员,我是艺术家,但是我需要为特定的工作流程创建脚本,并且我对 python 有初级知识。

我的目标:使用从另一个程序的特定文本文件解析的 (x,y,z) 坐标在 3D 空间中创建对象。

前任。文本文件:

点 1 8.740349 -4.640922 103.950059
点 2 8.520906 3.447561 116.580496
点 3 4.235010 -7.562914 99.632423
等等等等

在我的文本文件中,点 # 和向量浮动之间有更多空间。

我想创建一个字典,用于在我的 3D 程序中创建对象。

例如,

myDictionary = {(第 1 点),[8.740349,-4.640922,103.950059]) 等}。

到目前为止,这是我的代码片段:

def createLocators():
global filePath 
global markerNum
global markerCoord  
print "getting farther! :)"
with open(filePath,'r') as readfile:
    for line in readfile:           
        if "point" in line:             
            Types = line.split('                                                            ')
            markerNum = [Type[1] for Type in Types]
            markerCoord = [Type[2] for Type in Types]
            print markerNum, markerCoord

正如您在代码中看到的,信息之间的间隔很长。我想如果我可以删除那个空间,我可以获得两个更容易使用的数据集。文本文档中还有更多我不关心的行,因此 if 语句仅过滤以“point”开头的行。当我运行 createLocator() 来测试它是否将行拆分到我的两个列表中时,它运行良好,但对我来说打印看起来是空的。

前任。

[''] ['']

我已经尝试在 SO 上搜索和搜索答案,并在 Pymel 和常规 python 文档中搜索我做错了什么或更好的方法,但我不得不承认我的知识范围到此为止。

我究竟做错了什么?有没有更好、更有效的方法来提取我需要的我丢失的数据?

谢谢阅读!

4

1 回答 1

0

首先,您可能不想在大量空格上进行拆分。实际上,您几乎可以肯定想要的是line.split()不带参数使用,因为这会将任何类型和任何数量的空白上的所有文本分开。IE:

>>> 'A B      C\t\n\t   D'.split()
['A', 'B', 'C', 'D']

然后,假设您显示的格式是正确的,您应该需要获取坐标Types[2:5],即 的第二、第三和第四个元素。Types

除此之外,您不应该为局部变量使用大写名称,也不应该使用全局变量。改用函数参数,并重命名Typessplit_line或其他东西。

于 2016-08-24T01:35:06.600 回答