0

こんにちは、テキスト ファイルからプロット用の座標を読み込もうとしていますが、理解できないエラーが発生し続けます。ファイル内の座標は次のようになります(0.1, 0.0, 0.0), (0.613125, 0.52202, 0.19919)。実行しようとしているコードは次のとおりです。

from visual import *

with open ('/Desktop/Coordlist2.txt','r') as open_file:

    rightFace = curve(pos=[(1,-1,-1), (1,-1,1), (1,-1,-1),(1,1,-1),(1,1,-1),(1,1,1),(1,1,1),(1,-1,1)], radius=0.01, color=color.cyan)
    backFace = curve(pos=[(1,-1,-1), (-1,-1,-1), (-1,-1,-1),(-1,1,-1),(-1,1,-1),(1,1,-1)], radius=0.01, color=color.cyan)
    leftFace = curve(pos=[(-1,-1,-1), (-1,-1,1), (-1,-1,1),(-1,1,1),(-1,1,1),(-1,1,-1)], radius=0.01, color=color.cyan)
    frontFace = curve(pos=[(-1,-1,1), (1,-1,1), (1,1,1),(-1,1,1)], radius=0.01, color=color.cyan)

    for line in open_file.readlines():
        coords = line
        points(pos=[coords], size=1, color=color.yellow)

これは私が得ているエラーメッセージです:

Traceback (most recent call last):
  File "/Users/Graphs.py", line 15, in <module>
    points(pos=[coords], size=1, color=color.yellow)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vis/primitives.py", line 84, in __init__
    self.process_init_args_from_keyword_dictionary( keywords )
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vis/primitives.py", line 212, in process_init_args_from_keyword_dictionary
    setattr(self, key, value)
ValueError: Object cannot be converted to array.

どんな助けでも大歓迎です

4

2 に答える 2

2

問題はここにあります:

for line in open_file.readlines():
    coords = line

ファイルから行を読み取ると、常に文字列が得られます。次に、その文字列を処理して、必要なデータ構造を生成する必要があります。したがって、次のような行がある場合 (たとえば)

l = '(5, 6, 7)'

明示的に分割して、そこからタプルを作成する必要があります。

l_tuple = tuple(int(n) for n in l.strip('()').split(','))

また、 agf が私に思い出させたように、おそらくそうすべきですfor line in open_file; ファイル全体をメモリにコピーせずに、行を個別に反復処理しopen_file.readlinesながら、メモリ内にファイルのコピーを作成します。for line in open_file

できるだけ完全にするために、次のような文字列を変換します。

s = '(0.1, 0.0, 0.0), (0.613125, 0.52202, 0.19919)'

あなたはこれを行うことができます:

>>> numbers = tuple(float(n.strip('( )')) for n in s.split(','))
>>> t1, t2 = numbers[:3], numbers[3:]

これは、1 行に 3 のタプルが常に 2 つある限り機能します。

彼のコメントの agf の解決策も機能しますが、タプルを正確に区切る必要があるため、もう少し脆弱です。'), ('実を言うと、Ignacio のソリューションは本当に最高です。:)

于 2011-07-24T14:46:41.820 に答える
2

それらがファイル内でどのように見えるかは関係ありません。それらは文字列として読み取られます。行を使用する前に解析する必要があります。試してみてくださいast.literal_eval()

于 2011-07-24T14:46:55.920 に答える