La lecture des blocs de données à partir d'un fichier en Python
Je suis nouveau sur python et suis en train de lire "blocs" de données à partir d'un fichier. Le fichier est écrit quelque chose comme:
# Some comment
# 4 cols of data --x,vx,vy,vz
# nsp, nskip = 2 10
# 0 0.0000000
# 1 4
0.5056E+03 0.8687E-03 -0.1202E-02 0.4652E-02
0.3776E+03 0.8687E-03 0.1975E-04 0.9741E-03
0.2496E+03 0.8687E-03 0.7894E-04 0.8334E-03
0.1216E+03 0.8687E-03 0.1439E-03 0.6816E-03
# 2 4
0.5056E+03 0.8687E-03 -0.1202E-02 0.4652E-02
0.3776E+03 0.8687E-03 0.1975E-04 0.9741E-03
0.2496E+03 0.8687E-03 0.7894E-04 0.8334E-03
0.1216E+03 0.8687E-03 0.1439E-03 0.6816E-03
# 500 0.99999422
# 1 4
0.5057E+03 0.7392E-03 -0.6891E-03 0.4700E-02
0.3777E+03 0.9129E-03 0.2653E-04 0.9641E-03
0.2497E+03 0.9131E-03 0.7970E-04 0.8173E-03
0.1217E+03 0.9131E-03 0.1378E-03 0.6586E-03
and so on
Maintenant, je veux être en mesure de préciser et de lire en un seul bloc de données de ces nombreux blocs. Je suis en utilisant numpy.loadtxt('filename',comments='#')
pour lire les données, mais il charge le fichier en entier en une seule fois. J'ai cherché en ligne et quelqu'un a créé un patch pour le numpy io routine pour spécifier la lecture de blocs, mais il n'est pas dans le courant dominant de numpy.
Il est beaucoup plus facile de choisir les blocs de données dans gnuplot mais j'aurais du écrire la routine de tracer les fonctions de distribution. Si je peux comprendre à la lecture des blocs spécifiques, il serait beaucoup plus facile en python. Aussi, je me déplace tous mes visualisation des codes python à partir d'IDL et gnuplot, si c'est agréable d'avoir tout en python au lieu d'avoir des choses un peu éparpillés dans plusieurs packages.
J'ai pensé à appeler gnuplot à partir de l'intérieur de python, de tracer un bloc sur une table et affectation de la sortie de certains de tableau en python. Mais je suis toujours en partant et je ne pouvais pas comprendre la syntaxe pour le faire.
Les idées, les pointeurs de résoudre ce problème serait d'une grande aide.
- Si vous souhaitez que l'utilisateur de spécifier, de dire une paire de valeurs (i,j) et de lire toutes les lignes entre la ligne "# i j" et la prochaine ligne vide?
- Alsmot! La chose exacte que je veux être en mesure de faire est d'être capable de spécifier i,j où i est le bloc de départ et j est le dernier bloc et un bloc est défini par les lignes séparées par deux ou plusieurs des lignes vides.
Vous devez vous connecter pour publier un commentaire.
Une rapide lecture de base:
Maintenant, je suppose que vous pouvez utiliser numpy pour lire les lignes...
b=np.array(a.split()).astype(float)
ne fonctionnerait pas.Le code suivant devrait probablement que vous obtenez commencé. Vous aurez probablement besoin de le module re.
Vous pouvez ouvrir le fichier pour la lecture à l'aide de:
Vous pouvez lire le fichier ligne par ligne en utilisant
Pour passer à la ligne suivante, qui commence avec un "#", vous pouvez utiliser:
Pour analyser une ligne qui ressemble à "# i j", vous pouvez utiliser l'expression régulière suivante:
Voir la documentation pour le "re" du module pour plus d'informations sur cette.
Pour analyser un bloc, vous pouvez utiliser le code suivant:
Ensuite, vous pouvez transformer votre bloc dans un tableau numpy si vous le souhaitez:
À condition que vous avez importé numpy comme np.
Si vous souhaitez lire plusieurs blocs entre i et j, il suffit de mettre le code ci-dessus pour lire un bloc dans une fonction et de l'utiliser plusieurs fois.
Espérons que cette aide!