2010-12-11 14 views
0

J'ai écrit une fonction qui prend un fichier avec des coordonnées x, y en entrée, et affiche simplement les coordonnées en python. Je veux travailler un peu plus avec les coordonnées et voici mon problème:Extraction de valeurs x minimum et maximum Python

par exemple après avoir lu un fichier que je reçois:

32, 48.6 
36, 49.0 
30, 44.1 
44, 60.1 
46, 57.7 

et je veux extraire le minimum et le x-valeur maximale.

Ma fonction pour lire le fichier est comme ceci:

def readfile(pathname): 
    f = open(sti + '/testdata.txt') 
    for line in f.readlines(): 
     line = line.strip() 
     x, y = line.split(',') 
     x, y= float(x),float(y) 
     print line 

je pensais quelque chose comme la création d'une nouvelle fonction avec min() et max() mais im assez nouveau pour python im un peu coincé.

si i par exemple appel min (readfile (chemin)), il se contente de lire le fichier entier à nouveau ..

Tout conseils est très apprécié :)

Répondre

1

Vous devez créer un générateur:

def readfile(pathname): 
    f = open(sti + '/testdata.txt') 
    for line in f.readlines(): 
     line = line.strip() 
     x, y = line.split(',') 
     x, y = float(x),float(y) 
     yield x, y 

Obtenir le minimum et le maximum de ici est facile:

points = list(readfile(pathname)) 
max_x = max(x for x, y in points) 
max_y = max(y for x, y in points) 
+2

'réduire' est presque toujours une erreur. Ici, utilisez 'max_x = max (x pour x, y en points)' et 'max_y = max (y pour x, y en points)' –

+0

Merci, mis à jour – terminus

+0

Pourquoi lire le fichier deux fois? Que faire si le fichier est extrêmement volumineux? – robert

4
from operator import itemgetter 

# replace the readfile function with this list comprehension 
points = [map(float, r.split(",")) for r in open(sti + '/testdata.txt')] 

# This gets the point at the maximum x/y values 
point_max_x = max(points, key=itemgetter(0)) 
point_max_y = max(points, key=itemgetter(1)) 

# This just gets the maximum x/y value 
max(x for x,y in points) 
max(y for x,y in points) 

les valeurs minimales sont trouvées en remplaçant max par min

Questions connexes