2016-06-10 19 views
-2

Ich bin ziemlich neu in Python. Für eine Übung lese ich Daten aus einer CSV-Datei ein und speichere sie in einer Liste. Probleme haben, dann auf Elemente in der Liste zuzugreifen und sie anschließend als Variablen zu speichern. in Berechnungen verwendet werden sollen späterExtrahieren von Daten aus einer Liste mit einer For-Schleife

Die in der Datei enthaltenen Daten werden durch zwei Sätze von Koordinaten

ID, x1, y1, x2, y2 

Ich muss in der Lage, eine ID, gefolgt sein, die Daten von meiner Liste zu extrahieren. in der Hoffnung, die Liste für mehrere zu berechnende Zeilen zu durchlaufen.

Jede Hilfe wird geschätzt!

Prost

+2

Willkommen, Jakeb zu Stack Overflow. Bitte lesen [wie man fragt] (http://stackoverflow.com/help/how-to-ask). Geben Sie ein minimales Beispiel und zeigen Sie, was Sie bisher versucht haben. ** Suche ** andere Fragen auf dieser Website. Ihre aktuelle Frage wird ohne dieses nicht viel Input erhalten. – micstr

Antwort

0

Sie sollten die csv Bibliothek

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

Danke Kumpel, das ist eine große Hilfe. Kann ich die erste Zeile überspringen, wenn die Daten eine Kopfzeile haben? Oder ist es am einfachsten, die Zeile einfach aus dem Reader zu löschen? – Jakeb

+0

Um die erste Zeile zu überspringen, geben Sie 'next (reader)' vor der for-Schleife ein. –

0

Ein Ansatz ist, um Ihre Daten in einem Wörterbuch zu sammeln (vielleicht das id Feld kann der Schlüssel sein) und alle Koordinaten für diese bestimmte ID sammeln . Hier

ist ein solcher Ansatz:

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]))) 

Basierend auf Ihren Kommentar:

Wie würde ich dann die Werte unter der folgenden berechnen: sqrt ((x2-x1) ** 2 + (y2-y1) ** 2) für jede der beiden im Wörterbuch enthaltenen Zeilen (Beispiel1 und Beispiel2)?

Sie können die Berechnungen, wie Sie die Datei lesen und speichern nur die Ergebnisse der id Wert:

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) 

Dann können Sie nur die Ergebnisse drucken:

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

Danke Kumpel. Also setzt der Code die Daten in ein Dictionary: '{'Example1': [(('2', '3'), ('2', '15')], 'Example2': [(('0', '0'), ('10', '20')]} ' Wie würde ich dann auf die Werte zugreifen, um folgendes zu berechnen: ' sqrt ((x2-x1) ** 2 + (y2 -y1) ** 2) ' für jede der beiden im Wörterbuch enthaltenen Zeilen (Example1 und Example2)? – Jakeb

+0

Nun, zuerst müssten Sie die Zahlen (welche Strings sind) in Ganzzahlen/Gleitkommazahlen umwandeln, je nachdem welche Art von Daten, die Sie haben. Um dies zu tun, können Sie nur den Leser ändern, wie diese 'Daten [Zeile [0]]. append (((float (row [1]), float (Zeile [2])), (float (row [3]), float (Zeile [4])))) '; dann einfach durch das Dictionary laufen und Ihre Berechnungen durchführen;' für tag, Werte in data.iteritems(): '; oder Sie können die Berechnungen in die Schleife selbst. –

Verwandte Themen