Chaine de caractère en python
Fermé
ccdms
Messages postés
2
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
9 janvier 2008
-
8 janv. 2008 à 00:08
mmrad1 - 21 févr. 2013 à 15:01
mmrad1 - 21 févr. 2013 à 15:01
A voir également:
- Chaine de caractère en python
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Citizen code python avis - Accueil - Outils
6 réponses
jooshig
Messages postés
40
Date d'inscription
lundi 30 octobre 2006
Statut
Membre
Dernière intervention
9 janvier 2008
9
9 janv. 2008 à 03:15
9 janv. 2008 à 03:15
# obtention des données f = open('matrice',"r") lignes = f.readlines() f.close() # définition d'une matrice vide NL = len(lignes) NC = len(lignes[0]) if NL>1: NC = NC-1 print 'N_Lignes =',NL,' N_Colonnes =',NC m = {} for i in range(1,NL+1): m[i] = {} # remplissage de la matrice for i in range(1,NL+1): for j in range(1,NC+1): m[i][j] = int(lignes[i-1][j-1]) # affichage de la matrice remplie print '\nMatrice créée:' for i in range(1,NL+1): for j in range(1,NC+1): print m[i][j], print '' print ''
lignes est une liste des lignes présentes dans le fichier 'matrice'
NL = len(lignes) la longueur de la liste correspond au nombre d'éléments de la liste
NC = len(lignes[0]) le nombre de caractères de la première ligne (numérotée 0) est le nombre de colonnes à condition que toutes les lignes du fichier aient le même nombre de caractères
if NL>1: NC = NC-1 Il faut soustraire 1 à la longueur de la ligne pour tenir compte de la présence du signe de retour à la ligne (la plupart du temps invisible), car readlines() lit tous les caractères y compris celui de retour à la ligne. Pour voir le signe de retour à la ligne (qui est noté \n), il faut faire print lignes. Mais ceci n'est vrai que s'il n'y a pas qu'une seule ligne dans le fichier, sinon lignes ne comporte qu'une seule ligne sans le signe de retour à la ligne à la fin.
m = {} crée un dictionnaire vide
for i in range(1,NL+1): m[i] = {} définit NL éléments pour le dictionnaire m et les définit comme étant eux même des dictionnaires.
À ce stade, m est donc un dictionnaire de NL dictionnaires, ces derniers étant de longueurs encore indéfinies.
m[i][j] = int(lignes[i-1][j-1])
La numérotation des lignes et des colonnes de la matrice commence à 1, tandis que le premier élément de la liste 'lignes' est numéroté 0 et que le premier caractère de chaque ligne est numéroté 0.
-----------------------------
Il serait aussi possible de définir la matrice comme un dictionnaire de listes.
dicli = {} for i in range(1,NL+1): dicli[i] = [] for i in range(1,NL+1): for j in range(1,NC+1): dicli[i].append(int(lignes[i-1][j-1])) print '\nMatrice dict de listes' for i in range(1,NL+1): for j in range(1,NC+1): print dicli[i][j-1], print ''
Mais le remplacement d'un élément d'une telle matrice serait compliqué par le fait qu'on ne peut pas facilement insérer ou remplacer un élément à une position donnée dans une liste. Un dictionnaire de dictionnaire est le mieux je pense.
darkneurone
Messages postés
39
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
12 juin 2008
12
8 janv. 2008 à 00:27
8 janv. 2008 à 00:27
Bonsoir,
euh je ne comprends pas trop ton problème.. Mais ici, c'est normal que tu obtiennes cette erreur puisque la fonction .readlines() te renvoie un string.
En gros, tu essayes de lire un fichier, de lire les données qui sont dedant, et de les stocker dans une matrice ? Si tu sais comment sont rangées les données dans le fichier, tu as juste à recupérer le nombre de caractère avec .read(NbChar) et jouer avec le curseur. Sinon tu peux récupérer tout le contenu du fichier et l'analyser en utilisant le module 'string' ou 're' (pour les expressions régulières).
Enfin bref, tout dépend de comment sont stockées tes données dans le fichier..
Par contre, il y a un problème plus important, c'est que python ne peux gérer autre chose (de base) que des tableaux unidimensionnels. Tu peux en revanche utiliser une librairie spécialisée dans les opérations mathématiques, entre autres les matrices : NumPy
Bonne soirée/journée ^^
NB : un peu de doc pour NumPy : https://docs.scipy.org/doc/
EDIT : Oops j'y avais pas pensé !
euh je ne comprends pas trop ton problème.. Mais ici, c'est normal que tu obtiennes cette erreur puisque la fonction .readlines() te renvoie un string.
En gros, tu essayes de lire un fichier, de lire les données qui sont dedant, et de les stocker dans une matrice ? Si tu sais comment sont rangées les données dans le fichier, tu as juste à recupérer le nombre de caractère avec .read(NbChar) et jouer avec le curseur. Sinon tu peux récupérer tout le contenu du fichier et l'analyser en utilisant le module 'string' ou 're' (pour les expressions régulières).
Enfin bref, tout dépend de comment sont stockées tes données dans le fichier..
Par contre, il y a un problème plus important, c'est que python ne peux gérer autre chose (de base) que des tableaux unidimensionnels. Tu peux en revanche utiliser une librairie spécialisée dans les opérations mathématiques, entre autres les matrices : NumPy
Bonne soirée/journée ^^
NB : un peu de doc pour NumPy : https://docs.scipy.org/doc/
EDIT : Oops j'y avais pas pensé !
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
8 janv. 2008 à 10:14
8 janv. 2008 à 10:14
Effectivement, NumPy est la meilleure solution pour travailler avec des matrice.
Maintenant, ccdms, on ne connaît pas la structure de ton fichier, on ne peut donc rien dire.
Est-ce qu'il y a une ligne dans le fichier texte par ligne de matrice ?
Les valeurs sont-elles séparées par des espaces, ou d'autres caractères ?
Maintenant, ccdms, on ne connaît pas la structure de ton fichier, on ne peut donc rien dire.
Est-ce qu'il y a une ligne dans le fichier texte par ligne de matrice ?
Les valeurs sont-elles séparées par des espaces, ou d'autres caractères ?
Utilisateur anonyme
8 janv. 2008 à 00:21
8 janv. 2008 à 00:21
logique, matrice est une liste de ligne (cf http://docs.python.org/lib/bltin-file-objects.html) et non un tableau
def creerMatrice(fichier):
""" Creation de la matrice a partir du fichier texte"""
f = open(fichier,"r")
matrice = f.readlines().split(" ");
f.close()
return matrice
Cela devrai te retrouner une liste de liste... donc une sorte de matrice
def creerMatrice(fichier):
""" Creation de la matrice a partir du fichier texte"""
f = open(fichier,"r")
matrice = f.readlines().split(" ");
f.close()
return matrice
Cela devrai te retrouner une liste de liste... donc une sorte de matrice
ccdms
Messages postés
2
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
9 janvier 2008
9 janv. 2008 à 00:46
9 janv. 2008 à 00:46
merci de la réponse: oui c'est bien une liste de liste car si j'essaye de l'afficher avec cette fonction:
def afficher(matrice):
ligne,colonne = len(matrice),len(matrice[0])-1
for i in range(ligne):
for j in range(colonne):
print matrice[i][j],
print
j'ai bien le contenu de la matrice. Mais le problème est que je veux avoir une matrice que je peux modifier (changer la valeur d'un élément "matrice[i][j]" ) après la création de la matrice. j'ai créé sur le Shell directement des matrices( liste de listes) d'entiers et là la modification des valeurs passe sans problème.
En d'autres termes on me donne une matrice d'entiers (que des 0 et des 1)à manipuler mais la matrice est donnée sous forme d'un fichier de texte dont les lignes représentent les lignes de la matrice par exemple: ces 4 lignes d'un fichier texte "fichier.txt"
01010100
01010010
10110111
01010010
représentent une matrice d'entiers de 4 lignes et 8 colonnes qu'il faut récupérer et manipuler par la suite.
comment faire de sorte à avoir une liste de listes d'entiers au lieu d'une liste de strings.
merci.
def afficher(matrice):
ligne,colonne = len(matrice),len(matrice[0])-1
for i in range(ligne):
for j in range(colonne):
print matrice[i][j],
j'ai bien le contenu de la matrice. Mais le problème est que je veux avoir une matrice que je peux modifier (changer la valeur d'un élément "matrice[i][j]" ) après la création de la matrice. j'ai créé sur le Shell directement des matrices( liste de listes) d'entiers et là la modification des valeurs passe sans problème.
En d'autres termes on me donne une matrice d'entiers (que des 0 et des 1)à manipuler mais la matrice est donnée sous forme d'un fichier de texte dont les lignes représentent les lignes de la matrice par exemple: ces 4 lignes d'un fichier texte "fichier.txt"
01010100
01010010
10110111
01010010
représentent une matrice d'entiers de 4 lignes et 8 colonnes qu'il faut récupérer et manipuler par la suite.
comment faire de sorte à avoir une liste de listes d'entiers au lieu d'une liste de strings.
merci.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
>
ccdms
Messages postés
2
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
9 janvier 2008
9 janv. 2008 à 09:21
9 janv. 2008 à 09:21
Si tes données 0010001... sont stockées dans un fichier "matrice.txt", ça donne:
Ce qui affiche:
import numpy donnees = [] for ligne in file("matrice.txt"): donnees.append( [int(i) for i in ligne.strip()] ) a = numpy.array(donnees) a[2][3] = 5 print a print a[2][3]
Ce qui affiche:
[[0 1 0 1 0 1 0 0] [0 1 0 1 0 0 1 0] [1 0 1 5 0 1 1 1] [0 1 0 1 0 0 1 0]] 5
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
31 mars 2008 à 13:09
31 mars 2008 à 13:09
J'ai ajouté import numpy-----> "No module named numpy"
Il faut aller télécharget et installer Numpy.
Il ne fait pas partie de la version standard de Python.
Il faut aller télécharget et installer Numpy.
Il ne fait pas partie de la version standard de Python.
31 mars 2008 à 12:17
Le code que vous avez posté est vraiment interaissant mais ça m'a généré une erreur à la ligne:
m[i][j] = int(lignes[i-1][j-1])
-->"invalid literal for int() with base 10:'a'"
cette erreur m'a apparu non seulement avec votre code mais aussi à chaque fois que j'utilise j i et leur boucle
J'ai ajouté import numpy-----> "No module named numpy"
Q'est ce que je dois faire. C'est très important.
Quelle est la format de votre fichier .txt
Merci
31 mars 2008 à 12:25
vous essayez de convertir la lettre 'a' en nombre.
Je présume que ce 'a' est présent dans votre fichier.