Bonjour à tous.
Je suis confronté à un problème de lecture de fichier. Certaines données sont écrites avec un espace en séparateur de miliers. Je ne parviens pas à les transformer en valeurs numériques.
Je dois lire des données numériques d'un fichier texte provenant d'une machine d'aquisition. Je ne connais pas l'encodage (bien évidemment...) mais je soupsonne iso8859_15 (en tout cas, il arrive à le lire sans problème dans ce cas là).
J'importe les données qu'il contient en utilisant genfromtxt de numpy. Bien évidemment, pour corser un peu les choses, le séparateur de décimale est une virgule. Du coup, j'importe sous forme de chaine de caractère, puis je remplace les virgules par des points, puis ensuite, je converti en float.
Cela fonctionne bien tant que j'ai moins de 999 données. Au dessus, j'ai un séparateur de milliers (un espace). Et là, impossible de m'en débarasser. j'ai tenté un replace(" ","") sans succès. J'ai tenté de convertir la chaine en utf8 puis de faire replace(u" ","") sans succès. Au moment de la conversion, l'espace se transforme en un A surmonté du symbole ° et suivi d'un espace.
Mon code :
lorsque je sors les valeurs de tempo avant et après le decode, j'ai le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 fich = io.open(self.fichier, encoding=self.encodage) temp = np.genfromtxt(fich, skip_header=self.nbHead, delimiter=self.sepCol, dtype=str) fich.close() for i in range(np.shape(temp)[0]): for j in range(np.shape(temp)[1]): tempo = temp[i][j] tempo = tempo.decode(self.encodage, errors='replace') tempo = tempo.replace((u' ').encode(self.encodage),'') temp[i][j] = temp[i][j].replace(self.sepDec,'.') if not temp[i][j] : temp[i][j] = str(np.nan) temp=temp.astype(np.float)
sauf que dans ma console, le caractère * est en fait un espace... (c'est bizare d'ailleurs...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 1*434 <type 'numpy.string_'> 1Â*434 <type 'unicode'>
Quelqu'un aurait-il une solution à me proposer concernant la gestion de ces séparateurs de milliers, et de la conversion en utf8 ? Y a-t-il une différence entre le str de python et le numpy.string ?
Merci d'avance
PS : je précise que je code en python 2.7, et que mes scripts sont en utf8. Je suis sous linux (mais mes scripts sont destinés à etre aussi utilisés sous windows...). Je code en utilisant spyder.
Partager