2015-01-10 35 views
-4

我有一个文本文件名为listCls.txt的元组(每行一个)。他们看起来像这样从文本文件导入元组到列表中

(10.0, 0.0, 0.0) 

(9.297883, 3.680947, 0.0) 

(7.071068, 7.071068, 0.0) 

我想将这个文本文件作为列表导入到我的python脚本中,如下所示。

list = [(10.00 , 0.00 , 0.00),(9.30,3.68 , 0.00) , (7.07, 7.07, 0.00)] 

我也想把它们四舍五入到两位数的地方。谢谢

+0

这些数字根本不匹配。最后两个元组看起来像重新排列但略有不同。绝对不是你的输出相同。最新情况 – jamylak

+0

@jamylak。是的,我纠正了它。我是一个抄袭错误。谢谢你指出。 – zee

+0

我还是不明白你是怎么回到'9.28' – jamylak

回答

1

不会为你解决,因为你没有尝试任何东西。

指南

  1. 打开文件(open('file.txt', r))和
  2. 对于每一个你读行:
    1. 删除括号
    2. 分裂用逗号
    3. 修剪件(提示: .strip()
    4. 将它们转换为数字
    5. 做你的四舍五入
    6. 撰写的元组这些数字
+0

谢谢。我刚刚在2周前开始学习python。这非常迷人。以前我使用循环将元组导入到列表中。当我尝试打印第一个元素的第一个元素,例如元素[1] [0],它应该给我X坐标时,它只会给我第一个坐标值。它以某种方式将元组导入为字符串而不是数字。 – zee

+0

如果您将代码添加到问题中,某人(也许是我)可以帮助解决问题。我真的不知道你在做什么错误。 – MightyPork

1

我敢肯定,有一种方法与现有的蝈蝈组件要做到这一点,但我觉得它有一个去只是查看。

该位产生一些符合你的数据:

import random 

f = open('listCls.txt','w') 
for i in range(100): 
    a = random.uniform(0, 10) 
    b = random.uniform(0, 10) 
    c = random.uniform(0, 10) 
    f.write('({}, {}, {})\n\n'.format(a,b,c)) 
f.close() 

那么该位读它:

f = open('listCls.txt','r') 

list =[] 

for line in f: 
    if line[0]=="(": 
     tup = eval(line) 
     list.append(tup) 

print list 

我敢肯定,有人会说,使用eval是邪恶的,但如果你已经生成了这些数据,并且您在中间某个地方的startGlobalWar()调用中没有下滑,这几乎就是eval所做的。

如果你不信任数据源(如果你没有创建它,那么你可能不应该)然后制作一个字符串discombobulator,如MightyPork建议的那样。

我已经舍弃了四舍五入的部分。四舍五入是为了人类。如果数据有小数位,请坚持使用,直到您绝对需要。否则,你只会得到累积性的不确定性,如果你需要把它带入现实世界,那么它就是第一次和第一次一起工作,并且不得不整夜打磨以使它们合适。