2012-09-11 3 views
0

Supposons que vous ayez un fichier de données qui comprend plusieurs ensembles de données séparés par la chaîne « - » dans le format suivant:Python numpy: Fichier de données avec plusieurs ensembles de données

-- 
<x0_val> <y0_val> 
<x1_val> <y1_val> 
<x2_val> <y2_val> 
-- 
<x0_val> <y0_val> 
<x1_val> <y1_val> 
<x2_val> <y2_val> 
... 

Comment pouvez-vous lire le fichier entier dans un tableau de tableaux de sorte que vous pouvez ensuite tracer tous les ensembles de données à la même image avec une boucle for sur le tableau externe?

genfromtxt('data.dat', delimiter=("--")) 

donne beaucoup de

Line #1550 (got 1 columns instead of 2) 
+0

Voir: http://stackoverflow.com/questions/3518778/how-to-read-csv-into-record-array-in-numpy – Oz123

+0

Voir [que] (http://stackoverflow.com/ questions/12223965/comment-analyser-les-données-de-un-fichier-texte-en-2d-array-in-python/12227618 # 12227618) –

+0

[Qu'avez-vous essayé] (http: // whathaveyoutried.com)? Vous pouvez utiliser split via deux délimiteurs (d'abord '--', puis' '' '. –

Répondre

0

Je mettrai à jour ...

Je voudrais tout d'abord diviser le fichier en plusieurs fichiers, qui peuvent résider dans la mémoire sous forme d'objets ou sur les systèmes de fichiers comme nouveau des dossiers. Vous pouvez trouver la chaîne -- avec le module re.

Ensuite, vous pouvez utiliser le lien que j'ai posté ci-dessus.

+0

Il existe 130 ensembles de données divisés en plusieurs fichiers? – ritter

+0

@Frank, pourquoi pas? Si cela est persistant, il sera plus facile de travailler plus tard – Oz123

1

Si vous êtes certain à 100% que vous avez pas de valeurs négatives dans votre fichier, vous pouvez essayer un rapide:

np.genfromtxt(your_file, comments="-") 

Le comments="-" forcera genfromtxt à ignorer tous les caractères après -, ce qui bien sûr donnera des résultats bizarres si vous avez des variables négatives. De plus, le résultat sera juste un morceau de votre ensemble de données dans un seul tableau

Sinon, l'itinéraire le plus sûr est d'itérer sur votre fichier et de stocker les lignes qui ne correspondent pas -- dans une liste par bloc, quelque chose le long des lignes :

blocks = [] 
current = [] 
for line in your_file: 
    if line.startswith("-"): 
     blocks.append(np.array(current)) 
     current = [] 
    else: 
     current += line.split() 

Vous devrez peut-être vous débarrasser du premier bloc s'il est vide. Vous pouvez également vérifier un mmap based solution already posted.

+0

Cela semble fonctionner Accrocher – ritter

+0

Il semble lire uniquement le premier ensemble de données – ritter

+0

Non, avec 'Commments' il ne fait que créer un tableau de tableaux – ritter

Questions connexes