Convertir chaine de caractère [Résolu]

Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 25 oct. 2011 à 19:04 - Dernière réponse :
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
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
Afficher la suite 

Votre réponse

21 réponses

Meilleure réponse
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 3 nov. 2011 à 11:13
3
Merci
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.

Merci cs_laurent1024 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_laurent1024
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 26 oct. 2011 à 09:55
0
Merci
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'
Commenter la réponse de cs_laurent1024
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 26 oct. 2011 à 18:34
0
Merci
Bonjour,
Merci pour votre réponse je vais essayé ca
Commenter la réponse de basmaber
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 26 oct. 2011 à 19:44
0
Merci
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]
Commenter la réponse de basmaber
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 27 oct. 2011 à 08:19
0
Merci
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()
Commenter la réponse de cs_laurent1024
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 2 nov. 2011 à 12:18
0
Merci
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
Commenter la réponse de basmaber
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 2 nov. 2011 à 13:26
0
Merci
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
Commenter la réponse de cs_laurent1024
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 2 nov. 2011 à 14:24
0
Merci
Oui je la corrigé mais la question cété comment faire pour convertir les liste de string en valeur entières ?
Commenter la réponse de basmaber
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 2 nov. 2011 à 14:58
0
Merci
for row in csv_reader:
    listEntier = [int(x.replace('.', '')) for x in row]
     
Commenter la réponse de cs_laurent1024
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 2 nov. 2011 à 15:21
0
Merci
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'
>>>
Commenter la réponse de basmaber
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 3 nov. 2011 à 09:33
0
Merci
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
Commenter la réponse de cs_laurent1024
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 3 nov. 2011 à 09:46
0
Merci
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
Commenter la réponse de basmaber
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 3 nov. 2011 à 09:52
0
Merci
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)
Commenter la réponse de cs_laurent1024
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 3 nov. 2011 à 10:07
0
Merci
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]
Commenter la réponse de basmaber
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 3 nov. 2011 à 10:08
0
Merci
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
Commenter la réponse de basmaber
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 3 nov. 2011 à 10:31
0
Merci
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))
Commenter la réponse de cs_laurent1024
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 3 nov. 2011 à 11:04
0
Merci
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 :)
Commenter la réponse de basmaber
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 3 nov. 2011 à 11:23
0
Merci
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?
Commenter la réponse de basmaber
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 3 nov. 2011 à 11:27
0
Merci
Oui c'est bon j'ai fais ca et ca marché
a=float(dI[0])
b=float(SIav[0])
print a+b
Commenter la réponse de basmaber
Messages postés
23
Date d'inscription
mardi 25 octobre 2011
Dernière intervention
4 janvier 2012
- 5 déc. 2011 à 10:57
0
Merci
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=""
Commenter la réponse de basmaber

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.