J'essaie de lire les lignes d'un fichier texte dans une liste ou un tableau en python. J'ai juste besoin de pouvoir accéder individuellement à n'importe quel élément de la liste ou du tableau après sa création.
Le fichier texte est formaté comme suit:
0,0,200,0,53,1,0,255,...,0.
Là où le ...
est ci-dessus, le fichier texte réel contient des centaines ou des milliers d'éléments supplémentaires.
J'utilise le code suivant pour essayer de lire le fichier dans une liste:
text_file = open("filename.dat", "r")
lines = text_file.readlines()
print lines
print len(lines)
text_file.close()
Le résultat que j'obtiens est:
['0,0,200,0,53,1,0,255,...,0.']
1
Apparemment, il lit le fichier entier dans une liste d'un seul élément, plutôt que dans une liste d'éléments individuels. Qu'est-ce que je fais mal?
Réponses:
Vous devrez diviser votre chaîne en une liste de valeurs en utilisant
split()
Alors,
la source
.csv
fichier (comme mentionné par l'OP), par exemple, un fichier contenant les caractères alphabétiques 3 par ligne (a,b,c
,d,e,f
, etc.) et appliquer la procédure décrite ci - dessus ce que vous obtenez est une liste comme celle-ci:['a', 'b', 'c\nd', 'e', ... ]
(notez l'élément'c\nd'
). Je voudrais ajouter que, le problème ci-dessus ne se dérobant pas, cette procédure réduit les données de lignes individuelles dans une seule méga-liste, généralement pas ce que je veux lors du traitement d'un fichier de données orienté enregistrement.csv
module ou un autre analyseur existantVous pouvez également utiliser numpy loadtxt comme
la source
dtype : data-type
paramètre. docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html Pandas read_csv est très facile à utiliser. Mais je n'ai pas vu de moyen de spécifier le format pour cela. Il lisait des flottants de mon fichier, alors que j'avais besoin d'une chaîne. Merci @Thiru pour avoir montré loadtxt.Vous voulez donc créer une liste de listes ... Nous devons commencer par une liste vide
ensuite, nous lisons le contenu du fichier, ligne par ligne
Un cas d'utilisation courant est celui des données en colonnes, mais nos unités de stockage sont les lignes du fichier, que nous avons lues une par une, vous pouvez donc vouloir transposer votre liste de listes. Cela peut être fait avec l'idiome suivant
Une autre utilisation courante est de donner un nom à chaque colonne
afin de pouvoir opérer sur des éléments de données homogènes
La plupart de ce que j'ai écrit peut être accéléré en utilisant le
csv
module, de la bibliothèque standard. Un autre module tiers estpandas
, qui vous permet d'automatiser la plupart des aspects d'une analyse de données typique (mais a un certain nombre de dépendances).Mise à jour Alors que dans Python 2
zip(*list_of_lists)
renvoie une liste différente (transposée) de listes, dans Python 3, la situation a changé etzip(*list_of_lists)
renvoie un objet zip qui n'est pas en indice.Si vous avez besoin d'un accès indexé, vous pouvez utiliser
qui vous donne une liste de listes dans les deux versions de Python.
D'un autre côté, si vous n'avez pas besoin d'un accès indexé et que vous voulez simplement créer un dictionnaire indexé par noms de colonnes, un objet zip convient parfaitement ...
la source
csv
module ...Cette question demande comment lire le contenu des valeurs séparées par des virgules d'un fichier dans une liste itérable:
0,0,200,0,53,1,0,255,...,0.
Le moyen le plus simple de le faire est d'utiliser le
csv
module comme suit:Maintenant, vous pouvez facilement répéter
spamreader
comme ceci:Voir la documentation pour plus d'exemples.
la source