2016-06-10 2 views
-2

Я довольно новичок в python. Для упражнения я читаю данные из файла csv и сохраняю его в списке. Возникли проблемы с доступом к элементам в списке и последующим их сохранением.Извлечение данных из списка с использованием цикла for

Данные, содержащиеся в файле будет идентификатор, а затем двумя наборами координат

ID, x1, y1, x2, y2 

Мне нужно, чтобы иметь возможность извлекать данные из моего списка, которые будут использоваться в расчетах позже. надеясь перевернуть список для нескольких строк, которые будут вычислены.

Любая помощь приветствуется!

Приветствия

+2

Приветствуем Jakeb для переполнения стека. Пожалуйста, прочитайте [как спросить] (http://stackoverflow.com/help/how-to-ask). Дайте минимальный пример и покажите, что вы пробовали до сих пор. ** Искать ** другие вопросы на этом сайте. Ваш текущий вопрос не получит большого вклада без этого. – micstr

ответ

0

Вы должны использовать csv библиотеку

with open('/path/to/file.csv', 'r') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     ID, x1, y1, x2, y2 = row 
+0

Спасибо, приятель, это большая помощь. Могу ли я пропустить первую строку, если данные имеют строку заголовка? Или проще всего просто удалить строку из читателя? – Jakeb

+0

Чтобы пропустить первую строку, введите 'next (reader)' перед циклом 'for'. –

0

Одним из подходов является сбор данных в словаре (возможно id поле может быть ключом) и собрать все координаты для конкретного идентификатора ,

Вот один такой подход:

import csv 
from collections import defaultdict 

data = defaultdict(list) 

with open('your_file.csv') as f: 
    reader = csv.reader(f) 
    next(reader) # skips the header row 
    for row in reader: 
    data[row[0]].append(((row[1],row[2]),(row[3],row[4]))) 

Основываясь на ваш комментарий:

Как бы я тогда получить доступ к значениям, чтобы вычислить следующее: SQRT ((x2-x1) ** 2 + (y2-y1) ** 2) для каждой из двух строк (пример 1 и пример2), содержащиеся в словаре?

Вы можете сделать расчеты, как вы читаете файл, а просто хранить результаты по id значение:

for row in reader: 
    id, x1, y1, x2, y2 = row 
    # We have to convert the numbers from a string to floats for the calculation 
    result = sqrt(float(x2)-float(x1))**2 + (float(y2)-float(y1))**2 
    data[id].append(result) 

Затем, вы можете просто распечатать результаты:

for id, results in data.iteritems(): 
    print('For ID: {}'.format(id)) 
    for row, result in enumerate(results): 
     print('\t{} - {}'.format(row+1, result)) 
+0

Спасибо, помощник. Таким образом, код помещает данные в словарь: '{'Пример1': [(('2', '3'), ('2', '15')], 'Example2': [(('0', '0'), ('10', '20')]} ' Как получить доступ к значениям для вычисления следующих значений: ' sqrt ((x2-x1) ** 2 + (y2 -y1) ** 2) ' для каждой из двух строк (пример1 и пример2), содержащихся в словаре? – Jakeb

+0

Ну, сначала вам придется преобразовать числа (которые являются строками) в целые числа/поплавки в зависимости от того, какой тип данных (например, float (строка [1]), float (строка [2])), (float (строка) строка [3]), float (строка [4])))), а затем просто прокручивайте словарь и выполняйте ваши вычисления; 'для тега, значения в data.iteritems():'; или вы можете выполнять вычисления в сам цикл. –

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