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_fileopen_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:]

只要每行总是有两个 3 的元组,这就会起作用。

agf 在他的评论中的解决方案也有效,但它有点脆弱,因为元组必须完全分开'), ('。说实话,伊格纳西奥的解决方案确实是最好的。:)

于 2011-07-24T14:46:41.820 回答
2

它们在文件中的外观无关紧要;它们被读取为字符串。您需要先解析这些行,然后才能使用它们;试试ast.literal_eval()

于 2011-07-24T14:46:55.920 回答