使用for循环从列表中提取数据

时间:2016-06-10 08:39:51

标签: python arrays list loops csv

我对python很新。对于练习,我正在读取csv文件中的数据并将其存储在列表中。遇到问题然后访问列表中的元素并将其存储为变量。

文件中包含的数据将是一个ID,后跟两组坐标

ID, x1, y1, x2, y2

我需要能够从列表中提取数据,以便稍后在计算中使用。希望循环遍历列表以计算多行。

感谢任何帮助!

干杯

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

一种方法是在字典中收集数据(也许id字段可以是关键字)并收集该特定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))