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ファイル)。これらの3つの数値を配列に追加して、配列に最終的に[[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]])

line [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 に答える