1

我有以下代码

my_file=open("test.stl","r+")
vertices=[]

for line in my_file:
    line=line.strip()
    line=line.split()
    if line.startswith('vertex'):
        vertices.append([[line[1],line[2],line[3]])

print vertices

my_file.close()

现在它给出了这个错误:

  File "convert.py", line 10
    vertices.append([[line[1],line[2],line[3]])
                                              ^
SyntaxError: invalid syntax

我的文件中有很多行,例如,其中很多行格式为顶点 5.6354345 3.34344 7.345345(stl 文件)。我想将这三个数字添加到我的数组中,以便我的数组最终将具有 [[v1,v2,v3],[v1,v2,v3],....] ,其中所有这些 v 都来自行。阅读其他类似的问题,我可能需要导入 sys,但我不确定这是为什么。

4

6 回答 6

2

您的 STL 文件中的行是否有任何前导空格?

如果他们这样做,您需要先将其剥离。

    line = line.strip()

另外:呼叫line.split()不影响线路。它会生成一个新列表,您应该为新列表命名并在之后使用它,如下所示:

    fields = line.split()
    vertices.append([fields[1], fields[2], fields[3]])
于 2013-01-10T21:57:15.613 回答
2

您没有将 line.strip 分配给变量,例如:

line_split = line.split()
vertices.append([[line_split[1],line_split[2],line_split[3]])

另一种方法是:

for line in my_file:
    line_split = line.split()
    if line_split[0] == 'vertex':
        vertices.append([[line_split[1],line_split[2],line_split[3]])
于 2013-01-10T21:59:14.357 回答
1
vertices.append([[line[1],line[2],line[3]])
                                          ^
SyntaxError: invalid syntax

删除第一个[(否则缺少])以修复SyntaxError. 您的代码中还有其他错误。


解析具有以下内容的行:

vertex 5.6354345 3.34344 7.345345 

格式化为具有浮点坐标的 3D 点列表:

with open("test.stl") as file:
    vertices = [map(float, line.split()[1:4])
                for line in file
                if line.lstrip().startswith('vertex')]
print vertices
于 2013-01-11T03:07:18.537 回答
0

list.split()不修改列表;它会生成一个全新的列表。

将结果分配line.split()到行:line = line.split()

然后照常进行。

http://www.tutorialspoint.com/python/string_split.htm

这不会解决问题,因为您仍然应该将单个字符拉出line(而不是空格),因为字符串作为开始的字符列表(见下文)。

text = "cat"
print(text[1])

>>> 'a'

我怀疑 Python 永远不会超过这个if line.startswith('vertex'):条件。正如其他人所说,核心问题可能涉及前导空间或文件本身。

此外,如果您只是读取文件,则无需包含访问模式“r+”。my_file=open("test.stl")效果也很好,而且更 Pythonic。

于 2013-01-10T22:00:42.380 回答
0

除了其他人提到的:

        vertices.append([[line[1],line[2],line[3]])

第 [1] 行之前的左括号过多,应该是:

        vertices.append([line[1],line[2],line[3]])

print verticies

您的列表被命名为顶点,而不是顶点。

于 2013-01-10T22:01:50.590 回答
-1

尝试使用: for line in my_file.readlines(): readlines 返回文件中所有行的列表。

您不需要在您的情况下导入 sys 。

于 2013-01-10T21:56:12.377 回答