2015-01-10 3 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. Compose кортеж из этих чисел
+0

Спасибо. Я только начал изучать python 2 недели назад. Это очень увлекательно. Раньше я импортировал кортежи в список, используя цикл. Когда я пытаюсь напечатать первую запись первого элемента, например, элемента [1] [0], который должен дать мне координату X, вместо этого он дает мне только первое число координат. Это как-то импортирует кортежи, поскольку строки не номера. – zee

+0

Если вы добавите свой код в вопрос, кто-то (возможно, я) поможет его исправить. Я действительно не знаю, что вы делаете неправильно. – MightyPork

1

Я уверен, что есть способ сделать это с помощью существующих компонентов Grasshopper, но я чувствовал, как с пойти на это просто видеть.

Этот бит генерирует некоторые данные, соответствующие вашим:

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 это зло, но если вы 've сгенерировал данные, и вы не поскользнулись в вызове startGlobalWar() где-то посередине, то это в значительной степени то, что было сделано для eval.

Если вы не доверяете источнику данных (и если вы этого не сделали, то вам, вероятно, не стоит), то создайте струйный дискомбулятор, как предложил MightyPork.

Я отказался от части об округлении. Округление - для людей. Если данные имеют десятичные знаки, наденьте их, пока вам не понадобится. В противном случае вы просто получите кумулятивную несоответствие, которая, если вам нужно принять это в реальный мир, - это различие между тем, что он собирается вместе в первый раз, и нужно не спать всю ночь, чтобы сделать их пригодными.

Смежные вопросы