Convertir chaine de caractère

Résolu
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012 - 25 oct. 2011 à 19:04
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012 - 5 déc. 2011 à 11:00
Bonsoir
J'ai créé un programme qui récupère des données provenant d'un fichier texte qui contient plusieurs valeurs 10 colonnes et 63 lignes. Les données sont des nombres mais lorsque je les copie dans ma liste, Python les prend pour des chaînes de caractères. Donc je ne peux pas les afficher en faisant un "plot". Après je dois comparer tout les valeurs de la liste avec une consigne et les séparer dans deux tableaux .
Quelqu'un saurait comment faire pour corriger ce problème?
Voila la commande que j'ai utilisée pour lire les valeurs de mon fichiers txt
import os
os.chdir("C:")
os.chdir("C:/Python27")
fichier = open('.../Python27/Ligne10.txt','rb')
fichier
I = [""]*1
for i ,ligne in enumerate ( fichier):
I.append(ligne)
del(I[0])
print "I",j,"=",I

Merci
A voir également:

21 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
3 nov. 2011 à 11:13
dI[i]+I = SOM1
> ça ne peut pas fonctionner.
L'affectation c'est toujours dans l'ordre suivant
la_variable_a_affecter = .... une valeur, ou un calcul.

Pour l'erreur
File "C:\Documents and Settings\Admin\Bureau\Basma\range\projet\input5.py", line 49, in <module>
dI[i]+SIav[i]==SOMav[i]

... il n'y a pas le code correspondant, mais un indexError arrive lors que tu veux accéder à un élément qui n'existe pas.
Vérifie la taille de tes listes, et la valeur de ta variable i.
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
26 oct. 2011 à 09:55
Bonjour.
Pour convertir une chaîne de caractères, tu peux utiliser la fonction int()
chaine="12"
chaineInt=int(chaine)


Toutefois, il faut faire attention car, ça peut lever des exceptions si tu essayes de convertir une chaine qui n'a pas le bon format.
int('ee') # levera ValueError: invalid literal for int() with base 10: 'ee'
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
26 oct. 2011 à 18:34
Bonjour,
Merci pour votre réponse je vais essayé ca
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
26 oct. 2011 à 19:44
Bonsoir,
j'ai une autre question je fais comment pour écrire une liste dans un fichier txt une liste de ce genre
I1=[200,300,400,345]
I2=[290,300,400,345]
I2=[200,307,498,345]
I2=[200,300,400,345]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
27 oct. 2011 à 08:19
Bonjour
Tu peux essayer quelque chose de ce genre là :
file = open("monfichier.txt", "w")
I1=[200,300,400,345]
f.write(";".join([str(x) for x in I1]))
...
f.close()
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
2 nov. 2011 à 12:18
mercii beaucoup, la je dois lire ce fichier txt
"5.";"100.";"120.";"80."
"10.";"200.";"220.";"180."
"15.";"300.";"320.";"280."
"25.";"400.";"420.";"380."
et apres je dois comparer les differentens valeur ,j'ai realisé ce programme mais je ne sais pas comment faire pr convertir les données en entier
#Ouverture du fichier source

import os
path = "C:/Documents and Settings/Admin/Bureau/Basma/range"
os.chdir(path)
#Importer un fihier texte

fichier = open('./range.txt','r')
liste =[]

import csv

csv_reader = csv.reader(fichier,delimiter='\t')

for row in csv_reader:
print row
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
2 nov. 2011 à 13:26
Bonjour.
essaye déjà d'utiliser le bon delimiter
csv_reader = csv.reader(fichier,delimiter=';') 

ensuite, tu devrais obtenir des listes de string que tu peux convertir par la suite en valeurs entières.

Cordialement
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
2 nov. 2011 à 14:24
Oui je la corrigé mais la question cété comment faire pour convertir les liste de string en valeur entières ?
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
2 nov. 2011 à 14:58
for row in csv_reader:
    listEntier = [int(x.replace('.', '')) for x in row]
     
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
2 nov. 2011 à 15:21
ca marche pas j'ai eu cette erreur
Traceback (most recent call last):
File "C:\Documents and Settings\Admin\Bureau\Basma\range\projet\input2.py", line 17, in <module>
listEntier = [int(x.replace('.', '')) for x in row]
ValueError: invalid literal for int() with base 10: '0000000000\t14250000000\t259900000000\t258321052632\t14713548387\t13783935484\t-6741935484\t-9009677419\t40344546381\t46095820591\t26721712538\t21742132781\t-11502548420\t9959159515\t334925173024\t228275277644\t10664'
>>>
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
3 nov. 2011 à 09:33
Bonjour.

essayes de faire, dans un premier temps
for row in csv_reader:
    for elt in row:
         print elt


ça permettra déjà de vérifier ce que fait ton reader.

Cdt
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
3 nov. 2011 à 09:46
j'ai obtenu cette liste :
5.
100.
120.
80.
10.
200.
220.
180.
15.
300.
320.
280.
25.
400.
420.
380.
mais la je ne sais pas comment faire pour les stocker dans des tableaux par exemple crée 4 tableaux le 1er contient les valeur suivant 5. 10. 15. 20.
j'ai essayé avec la fonction append mais j'ai cette erreur 18, in <module>
append.elt
NameError: name 'append' is not defined

python c'est trop compliqué :s
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
3 nov. 2011 à 09:52
Je ne sais pas exactement ce que tu veux faire avec tes tableaux, mais pour utiliser append, il faut que la liste soit définie avant d'utiliser un append.

list1=[]
...
list1.append(elt)
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
3 nov. 2011 à 10:07
en fait je veux crée 4 tableaux chaqu'un contient les valeur suivant:
T1=[5.,10.,15.,20.]
T2=[100.,200.,300.,400.]
T3=[15.,300.,320.,420.]
T4=[80.,180.,280.,380.]
car j'ai une autre liste de ce genre
I=[477,0.8,1.04,-0.015]
apres je dois comparé par exemple I[0] avec T1[0]+T2[0]
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
3 nov. 2011 à 10:08
voila ce que j avais fai jusqu'a mtn
#Ouverture du fichier source
import os

path = "C:/Documents and Settings/Admin/Bureau/Basma/range/projet"


#Importer un fihier texte
list1=[]
list1m=[]
fichier = open('./range.txt','r')
import csv, math
fichiercsv = csv.reader(fichier, delimiter=';')
f = open('./indicateurs.csv','r')
fcsv = csv.reader(f, delimiter=';')
for row in fichiercsv:
for elt in row:
list1.append(elt)
print list1
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
3 nov. 2011 à 10:31
en gros dans les différentes listes tu veux mettre le contenu de chaque colonne ?

Si c'est le cas, il faut faire quelque chose du genre
T1=[]
T2=[]
T3=[]
T4=[]
for row in fichiercsv:
    if (len(row) >= 4):
         T1.append(row[0])
         T2.append(row[1])
         T3.append(row[2])
         T4.append(row[3])

ça doit marcher si python accepte le row[0]...

Éventuellement tu peux essayer de simplifier l'écriture en faisant comme ça :

T= [ [],[] ,[] ,[]  ]
for row in fichiercsv:
    if len(row) == 4:
        for i,elt in enumerate(row):
            T.append(elt)


Tes tableaux T1, T2, T3, T4 serait remplacer par T[0], T[1], T[2] ,T[3]

Si tu veux avoir des valeurs entiers (et non des string) dans tes tableaux, il faudrait que tu
remplace les .append(monelement) par des .append(int(monelement)) ou éventuellement .append(int(str(monelement))
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
3 nov. 2011 à 11:04
mercii beaucoup j'ai deja essayé ca et ca marché :

#Ouverture du fichier source
import os

path = "C:/Documents and Settings/Admin/Bureau/Basma/range/projet"


#Importer un fihier texte
list1=[]
list2=[]
listn=[]
dI=[]
SIav=[]
SIst=[]
SIar=[]
I=[]
SOMav=[]
i=0
j=1
p=1

fichier = open('./range.txt','r')
import csv, math
fichiercsv = csv.reader(fichier, delimiter=';')
f = open('./indicateurs.csv','r')
fcsv = csv.reader(f, delimiter=';')
for row in fichiercsv:
for elt in row:
list1.append(elt)
while i<len(list1):
dI.append(list1[i])
SIav.append(list1[i+1])
SIst.append(list1[i+2])
SIar.append(list1[i+3])
i=i+4
print "dI:",dI
print "SIav:",SIav
print "SIst:",SIst
print "SIar:",SIar
for row in fcsv:
for elt in row:
list2.append(elt)
while j<len(list2):
I.append(list2[j])
j=j+3
print "Indicateur",p,":", I
p=p+1
I=[]

le résultat c'est ca :
dI: ['5.', '10.', '15.', '25.']
SIav: ['100.', '200.', '300.', '400.']
SIst: ['120.', '220.', '320.', '420.']
SIar: ['80.', '180.', '280.', '380.']
Indicateur 1 : ['477.791740950']
Indicateur 2 : ['0.841427227']
Indicateur 3 : ['1.040212404']
Indicateur 4 : ['-0.011527567']
alors la me reste de faire la somme des dI[0]avec Indicateur 1 , et dI[1]+Indicateur 2...
mais la quand j'ai essayé de faire ca
dI[i]+I = SOM1
j'ai eu cette erreur
Traceback (most recent call last):
File "C:\Documents and Settings\Admin\Bureau\Basma\range\projet\input5.py", line 49, in <module>
dI[i]+SIav[i]==SOMav[i]
IndexError: list index out of range
j'espère que je ne vous derange pas trop :)
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
3 nov. 2011 à 11:23
j'ai essayé de faire ca juste pour la 1er ligne
SOMav=dI[0]+SIav[0]
print SOMav
le resultat c'est ca:
dI: ['5.', '10.', '15.', '25.']
SIav: ['100.', '200.', '300.', '400.']
SIst: ['120.', '220.', '320.', '420.']
SIar: ['80.', '180.', '280.', '380.']
Indicateur 1 : ['477.791740950']
Indicateur 2 : ['0.841427227']
Indicateur 3 : ['1.040212404']
Indicateur 4 : ['-0.011527567']
5.100.
mais moi ce que je veux c'est la somme de 5. et 100. c'est a dire 105. je fais comment pour avoir ca?
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
3 nov. 2011 à 11:27
Oui c'est bon j'ai fais ca et ca marché
a=float(dI[0])
b=float(SIav[0])
print a+b
0
basmaber Messages postés 23 Date d'inscription mardi 25 octobre 2011 Statut Membre Dernière intervention 4 janvier 2012
5 déc. 2011 à 10:57
Bonjour,
j'ai besoin de votre aide la j'ai besoin de lire les parametre d'un fichier txt de ce genre :( I1="Cédage global de la cage ou des colonnes"
E1="Indicateur représentatif au point de fonctionnement standard le plus couramment utilisé (tf/mm)"
I2="Cédage global de la cage ou des colonnes"
E2="Indicateur représentatif des non linéarités liées à la déformation des éléments de contacts à surface variable pour les faibles efforts de laminage (s.u.)"
I3="Cédage global de la cage ou des colonnes"
E3="Indicateur représentatif du comportement mécanique de la cage aux efforts élevés de laminage (s.u.)"
I4="Indicateur représentatif du comportement différentiel mécanique cage F_Kelk"
E4="tout en s'affranchissement de l'évolution des variations "globales" transposées symétriquement (s.u.)"
I5="Indicateur représentatif du comportement différentiel mécanique cage F_Kelk"
E5="co-structuré par rapport à l'indicateur I4 en intégrant en complément le diagnostic sur le différentiel réel de serrage (s.u.)"
I6="Indicateur représentatif du comportement différentiel mécanique cage F_HGC"
E6="Equivalent à l'indicateur)
et d'afficher par exemple I1 ="" et ensuite afficer I2=""
0
Rejoignez-nous