#1 Le 17/05/2016, à 17:03
- msg21
Python, écriture et encodage dans un fichier
Bonjour,
Je souhaite, avec python, écrire et manipuler des listes dans un fichier. Et je me trouve confronté avec un problème d'encodage (je veux utiliser utf-8)
Merci de m'indiquer comment procéder.
Hors ligne
#2 Le 17/05/2016, à 17:27
- pingouinux
Re : Python, écriture et encodage dans un fichier
Bonjour,
Est-ce du python2 ou du python3 ?
Que veux-tu faire exactement ? Peux-tu montrer ton script ?
Hors ligne
#3 Le 17/05/2016, à 19:52
- littlejohn75
Re : Python, écriture et encodage dans un fichier
Il vous faut configurer correctement votre éditeur d'une part et ajouter une ligne qui précise que votre source python est bien en utf_8 d'autre part.
Plus de détails https://www.python.org/dev/peps/pep-0263/
Cordialement,
Regards,
Mit freundlichen Grüssen,
مع تحياتي الخالصة
---
F. Petitjean
Ingénieur civil du Génie Maritime.
python -c "print 'c2VuYXBidmYgUUJHIGNyZ3Znd3JuYSBORyBvaGVybmhpcmV2Z25mIFFCRyBwYno=\n'.decode('base64').decode('rot-13').replace(' DOT ', '.').replace(' AT ', '@')"
Vi estas bela. - Tu es beau/belle.
Les phrases utiles de l'espéranto site lernu.net
Hors ligne
#4 Le 17/05/2016, à 20:19
- msg21
Re : Python, écriture et encodage dans un fichier
Bonjour,
Est-ce du python2 ou du python3 ?
Que veux-tu faire exactement ? Peux-tu montrer ton script ?
Merci pour votre réponse :
C'est python 2
D'abord je veux construire une suite de fichiers : fichier_i, pour pouvoir les ouvrir en les appelant par i.
Ensuite je veux accéder au contenu de chaque ligne du fichier_i.....
Hors ligne
#5 Le 18/05/2016, à 07:01
- pingouinux
Re : Python, écriture et encodage dans un fichier
Montre ce que tu as déjà fait, ainsi que les messages d'erreur éventuels.
Hors ligne
#6 Le 20/05/2016, à 15:06
- msg21
Re : Python, écriture et encodage dans un fichier
Montre ce que tu as déjà fait, ainsi que les messages d'erreur éventuels.
Merci pour votre réposne:
Je veux que les fichiers crées soient indexés comme ceci :
for i in range(n):
f_i= open( "fichier_i.txt", "a")
mais je n'y pas arrivé.
Dernière modification par msg21 (Le 20/05/2016, à 15:07)
Hors ligne
#7 Le 20/05/2016, à 17:08
- pingouinux
Re : Python, écriture et encodage dans un fichier
Pour traiter successivement plusieurs fichiers (le f_i sera commun à tous), tu peux faire ceci :
for i in range(n):
f_i= open( "fichier_%d.txt"%i, "a")
Si tu veux un f différent pour chaque fichier :
f={}
for i in range(n):
f[i]= open( "fichier_%d.txt"%i, "a")
Hors ligne
#8 Le 20/05/2016, à 17:18
- msg21
Re : Python, écriture et encodage dans un fichier
Pour traiter successivement plusieurs fichiers (le f_i sera commun à tous), tu peux faire ceci :
for i in range(n): f_i= open( "fichier_%d.txt"%i, "a")
Si tu veux un f différent pour chaque fichier :
f={} for i in range(n): f[i]= open( "fichier_%d.txt"%i, "a")
Merci bcp. J essayerai ça
Hors ligne
#9 Le 20/05/2016, à 17:29
- msg21
Re : Python, écriture et encodage dans un fichier
ça marche.
Autre question, comment ajouter le contenu d'un fichier dans un autre?
Hors ligne
#10 Le 20/05/2016, à 18:03
- pingouinux
Re : Python, écriture et encodage dans un fichier
comment ajouter le contenu d'un fichier dans un autre?
En python ou en bash ?
Peux-tu montrer un exemple de ce que tu veux : fichier_1, fichier_2, fichier_résultat
Hors ligne
#11 Le 21/05/2016, à 19:05
- msg21
Re : Python, écriture et encodage dans un fichier
comment ajouter le contenu d'un fichier dans un autre?
En python ou en bash ?
Peux-tu montrer un exemple de ce que tu veux : fichier_1, fichier_2, fichier_résultat
Chaque ligne de fichier_1 contient une liste par exemple [1,2,3], comment considérer [1,2,3] comme une liste pour pouvoir faire [1,2,3] .extend([4])
car j'ai ce message d'erreur : (où T= [1,2,3])
print T.extend([4])
AttributeError: 'str' object has no attribute 'extend'
Hors ligne
#12 Le 21/05/2016, à 19:44
- pingouinux
Re : Python, écriture et encodage dans un fichier
Montre comment tu lis le fichier.
Hors ligne
#13 Le 21/05/2016, à 19:48
- msg21
Re : Python, écriture et encodage dans un fichier
Montre comment tu lis le fichier.
comme ceci:
f[j]= open( "fichier_%d.txt"%j, "ra")
for T in f[j]:
------
Hors ligne
#14 Le 21/05/2016, à 20:03
- pingouinux
Re : Python, écriture et encodage dans un fichier
C'est parce que T est de type str et non list. Après avoir lu T, tu peux faire ceci :
for T in f[j]:
exec('T='+T)
Cette commande peut être dangereuse si le fichier contient n'importe quoi (risque d'exécuter des commandes destructrices).
Hors ligne
#15 Le 21/05/2016, à 20:19
- msg21
Re : Python, écriture et encodage dans un fichier
C'est parce que T est de type str et non list. Après avoir lu T, tu peux faire ceci :
for T in f[j]: exec('T='+T)
Cette commande peut être dangereuse si le fichier contient n'importe quoi (risque d'exécuter des commandes destructrices).
Merci.
ça marche avec cette méthode, mais ça m'inquiète que la commande est dangereuse .
Hors ligne
#16 Le 21/05/2016, à 20:35
- pingouinux
Re : Python, écriture et encodage dans un fichier
Si tu connais le contenu du fichier, il n'y a pas de problème.
Hors ligne
#17 Le 21/05/2016, à 20:47
- msg21
Re : Python, écriture et encodage dans un fichier
Ok, merci infiniment.
Hors ligne
#18 Le 22/05/2016, à 08:29
- pingouinux
Re : Python, écriture et encodage dans un fichier
f[j]= open( "fichier_%d.txt"%j, "ra")
Si tu veux pouvoir lire le fichier, et écrire à la fin, c'est
f[j]= open( "fichier_%d.txt"%j, "a+")
Hors ligne
#19 Le 22/05/2016, à 09:09
- msg21
Re : Python, écriture et encodage dans un fichier
Bonjour
Ya t-il un moyen que quand on fait open ou write on évite que le fichier se charge tout entier dans la mémoire ram pour ne pas la saturer ?
Merci
Hors ligne
#20 Le 22/05/2016, à 09:24
- pingouinux
Re : Python, écriture et encodage dans un fichier
Je pense que si tu lis le fichier ligne par ligne, il ne va pas être chargé en entier. C'est difficile de répondre précisément sans voir le script.
Hors ligne
#21 Le 22/05/2016, à 10:08
- msg21
Re : Python, écriture et encodage dans un fichier
Et pour l écriture en mode ajout, le fichier sera t-il ou non chargé tout entier dans la ram.
Hors ligne
#22 Le 22/05/2016, à 11:30
- pingouinux
Re : Python, écriture et encodage dans un fichier
Ce qui prend de la place, ce sont les variables dans ton programme. Si tu lis le fichier complet (var=f.read(), par exemple), il y aura une copie du fichier en mémoire. Ce ne sera pas le cas si tu lis le fichier ligne par ligne en stockant à chaque fois le résultat dans la même variable.
Quand tu écris à la fin du fichier (option "a" ou "a+" de open), si tu ne demandes pas une lecture complète, il ne chargera pas le fichier.
Hors ligne
#23 Le 22/05/2016, à 11:50
- msg21
Re : Python, écriture et encodage dans un fichier
Merci pour ces infos.
Et quelle est la commande pour lire ligne par ligne
Hors ligne
#24 Le 22/05/2016, à 11:55
- claudius01
Re : Python, écriture et encodage dans un fichier
Bonjour,
Ya t-il un moyen que quand on fait open ou write on évite que le fichier se charge tout entier dans la mémoire ram pour ne pas la saturer ?
Tout d'abord, un fichier tout entier est rarement chargé en mémoire sauf naturellement si celui-ci est de taille "raisonnable" par rapport à la RAM (Linux fait ce qu'il veut @ à ses critères d'optimisation en occupation ressources mémoire, cpu, I/O, accès verrouillés, etc.)
Après, si la RAM est saturée (et là des mécanismes de swap rentrent en action ;-), de toute façon certaines pages représentant le fichier non utilisées à instant t iront sur disque pour libérer justement de la mémoire et seront rapatriées en RAM si besoin est. De plus, tout dépend du système de fichiers (cf. ZFS qui privilégie la mémoire et est sans limite de taille de fichier ;-).
En résumé, le sujet n'est pas simple et affaire de spécialistes que je ne suis pas, et comme je connais, msg21, ton expression des besoins en terme de calculs très gourmands en mémoire, je crains que tu doives t'orienter vers un traitement distribué sur plusieurs serveurs (cf. RESOLU ET PUBLIE Test d'un code python (SVP) post #33)...
Hors ligne
#25 Le 22/05/2016, à 12:04
- pingouinux
Re : Python, écriture et encodage dans un fichier
Et quelle est la commande pour lire ligne par ligne
for T in f[j]:
La commande précédente lit une ligne à la fois.
Tu peux aussi utiliser, dans une boucle
T=f[j].readline()
Hors ligne