'b' ajouté lors de l'utilisation de numpy loadtxt
J'ai essayé de créer un tableau à partir d'un fichier texte.
J'ai vu plus haut que la numpy avait une méthode loadtxt
, alors je l'ai essayer, mais ajouter un peu de cochonneries devant chaque ligne...
# my txt file
.--``--.
.--` `--.
| |
| |
`--. .--`
`--..--`
# my python v3.4 program
import numpy as np
f = open('tile', 'r')
a = np.loadtxt(f, dtype=str, delimiter='\n')
print(a)
# my print output
["b' .--``--. '"
"b'.--` `--.'"
"b'| |'"
"b'| |'"
"b'`--. .--`'"
"b' `--..--` '"]
Ce que sont ces " b " et les guillemets ? Et d'où viennent-ils ?
J'ai essayé la solution choisi à partir d'internet, comme ouvrir le fichier avec codecs, changer la dtype par 'S20', 'S11', et beaucoup d'autres choses qui ne fonctionnent pas...
Ce que j'attends est un tableau de chaînes unicode qui ressemble à ceci :
[[' .--``--. ']
['.--` `--.']
['| |']
['| |']
['`--. .--`']
[' `--..--` ']]
Info:
Je suis à l'aide de python 3.4 et numpy de la debian stable référentiel
J'ai déjà vérifier cette question avant, et, OK!, b est de type byte, mais pourquoi est-il à l'intérieur un guillemet double chaîne de caractères ? J'ai ré-utiliser ce tableau, plus tard, pour remplacer certains caractères dans un autre tableau, en fonction d'un indice. Donc, si j'ai un b et 2 extra simple guillemets, il cassera la plus récente du programme.
Pourquoi êtes-vous à l'aide de
Simple : je suis un total débutant en Python. J'ai commencé à l'utiliser pendant 1 semaine. J'ai plus précis dans le langage du web. Donc, je m'apparaît un peu confus 🙂
Pourquoi êtes-vous à l'aide de
loadtxt
pour charger un fichier comme ça? loadtxt
est conçu pour les colonnes de données séparées par des virgules ou une autre délimiteur. Vous pourriez tout aussi bien lire ce fichier avec pur python; par exemple, quelque chose comme with open('tile') as f: a = [line.strip('\n') for line in f.readlines() if not line.startswith('#')]
Simple : je suis un total débutant en Python. J'ai commencé à l'utiliser pendant 1 semaine. J'ai plus précis dans le langage du web. Donc, je m'apparaît un peu confus 🙂
OriginalL'auteur krshk | 2015-11-11
Vous devez vous connecter pour publier un commentaire.
np.loadtxt
etnp.genfromtxt
fonctionner en mode octet, qui est la valeur par défaut type chaîne de caractères en Python 2. Mais Python 3 utilise l'unicode, et les marques de bytestrings avec cetteb
.J'ai essayé quelques variantes, dans une
python3 ipython
session:genfromtxt
avecdtype=str
donne le plus propre d'affichage à l'exception de il des bandes de blancs. J'ai peut-être utiliser un convertisseur pour désactiver cette fonction. Ces fonctions visent à lirecsv
de données où (blanc)les espaces sont des séparateurs, ne fait pas partie des données.loadtxt
etgenfromtxt
sont plus tuer pour du texte simple comme cela. Une simple lecture de fichier n'bien:(mon éditeur de texte est définie sur la bande des espaces à droite, d'où le les lignes irrégulières).
@DSM's
suggestion:np.loadtxt("tile", dtype=bytes, delimiter="\n").astype(str)
pourrait fonctionner, mais je suis entièrement d'accord avec l'excès point.Formidable ! merci beaucoup !
OriginalL'auteur hpaulj
Vous pouvez utiliser
np.genfromtxt('your-file', dtype='U')
.dtype='U10'
que sans la 10 il vous suffit de faire une chaîne vide.OriginalL'auteur Mojtaba Khodadadi
Ce n'est probablement pas le plus "pythonic' ou la meilleure solution, mais certainement le travail effectué à l'aide de numpy.loadtxt dans python3. Je suis conscient que c'est un "sale" solution, mais cela fonctionne pour moi.
Cela permettra d'importer un tableau 2D à partir d'un fichier texte via numpy, enlever le "b "" et "" depuis le début et la fin de chaque chaîne, et de retourner une dépouillé de tableau de chaîne nommée "données".
Sont t-il de meilleures façons de faire? Probablement.
Fait ce travail? Yup. Je l'utilise assez que j'ai eu cette fonction dans mon propre module Python.
OriginalL'auteur ivanarnold
Python3 est de travailler avec Unicode. J'ai eu le même problème lors de l'utilisation de
loadtxt
avecdtype='S'
. Mais à l'aide dedtype='U
commeUnicode string
dans les deuxnumpy.loadtxt
ounumpy.genfromtxt
, il va donner de sortie sansb
OriginalL'auteur Kamalesh
J'ai eu le même problème et pour moi le moyen le plus simple s'est avéré pour utiliser le csv de la bibliothèque.
Vous obtenez votre sortie désirée par:
OriginalL'auteur Markus Dutschke