Lecture du fichier de chaîne de caractères en un tableau (Dans un pythonic façon)
Je suis en train de lire les lignes d'un fichier pour ensuite travailler avec eux. Chaque ligne est composée uniquement par des nombres réels.
J'ai à peu près tout trié afin de convertir les lignes dans les tableaux.
En gros, je fais (pseudopython code)
line=file.readlines()
line=line.split(' ') # Or whatever separator
array=np.array(line)
#And then iterate over every value casting them as floats
newarray[i]=array.float(array[i])
Cela fonctionne, mais semble un peu contre-intuitif et antipythonic, je voulais savoir si il y a une meilleure façon de gérer les entrées à partir d'un fichier pour avoir à la fin un tableau complet de la flotte.
Veuillez corriger votre pseudo-code. Si vous avez un
"pseudopython code"? Pourquoi!?
Pourquoi pas :)?
Le couple de réponses j'ai mis en œuvre exactement ce que j'ai demandé :). Je n'ai pas écrit la, car il pourrait être un de le faire, pour, ou de tout autre type de boucle de l'instruction, je voulais juste à point, j'ai été une itération sur les variables. En gros, je veux un tableau de flotteurs qui sont dans un fichier texte.
palafox: Si j'entre "pseudo-code exécutable" dans un moteur de recherche, le premier coup que je reçois est pour Python. Nous n'avons pas besoin pseudopython.
for
déclaration, veuillez écrire le for
déclaration, plutôt que d'un commentaire. Demandez-vous newarray=[ float(x) for x in array ]
ou newarray = map( float, array )
? Il n'est pas clair ce que vous cherchez."pseudopython code"? Pourquoi!?
Pourquoi pas :)?
Le couple de réponses j'ai mis en œuvre exactement ce que j'ai demandé :). Je n'ai pas écrit la, car il pourrait être un de le faire, pour, ou de tout autre type de boucle de l'instruction, je voulais juste à point, j'ai été une itération sur les variables. En gros, je veux un tableau de flotteurs qui sont dans un fichier texte.
palafox: Si j'entre "pseudo-code exécutable" dans un moteur de recherche, le premier coup que je reçois est pour Python. Nous n'avons pas besoin pseudopython.
OriginalL'auteur Leon palafox | 2011-06-02
Vous devez vous connecter pour publier un commentaire.
Réponse rapide:
Si vous processus souvent ce type de données, le csv module.
Si vous vous sentez à l'état sauvage, vous pouvez même faire de cette complètement déclarative:
Et si vous avez vraiment envie de vous des collègues à vous haïr, vous pouvez le faire en une seule ligne (PAS PYTHONIC À TOUS :-):
Le décapage de toutes les chaudières de la plaque et de flexibilité, vous pouvez vous retrouver avec un chiffon propre et tout à fait lisible un liner. Je ne voudrais pas l'utiliser parce que j'aime le refatoring potentiel de l'utilisation de
csv
, mais il peut être suffisant. C'est une zone grise, ici, je ne dirais pas que c'est Pythonic, mais c'est certainement à portée de main.OriginalL'auteur e-satis
Si vous voulez un tableau numpy et chaque ligne dans le fichier texte a le même nombre de valeurs:
Sans numpy:
Ou tout simplement:
numpy.loadtxt()
est la bonne façon de le faire, si numpy peut être utilisé. +1Aussi,
with
est génial!la dernière solution qui comprend
map
est si simple et ça marche!OriginalL'auteur jfs
Comment sur les éléments suivants:
Ne pas utiliser le nom
type
, c'est réservé.def f(typ=float)
oudef f(tipe=float)
serait mieux.OriginalL'auteur NPE
Une one-liner:
Notez que j'ai utilisé
map()
ici au lieu d'une liste imbriquée de compréhension pour faciliter la lisibilité.Si vous voulez un tableau numpy:
' '
argument pour.split()
Bien sûr, vous pouvez, mais je préfère faire les choses explicites lorsque vous répondez DONC aux questions. Dans mon propre code, ce qui est largement lus par des gens familiers avec Python, ou au moins de la programmation, j'ai tendance à le laisser dehors.
OriginalL'auteur Chinmay Kanchi
Je voudrais utiliser des expressions régulières
importation re
Premières fusionner les fichiers en un seul long de la chaîne, et puis l'extraire seulement les expressions correspondant à flotteurs ( '[\d.E+-]' pour la notation scientifique, mais vous pouvez également utiliser '[\d.]' pour seulement des expressions flottantes).
OriginalL'auteur rmhleo