Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

pingouinux a écrit :

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

pingouinux a écrit :

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

pingouinux a écrit :

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

pingouinux a écrit :

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

pingouinux a écrit :

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

pingouinux a écrit :

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

msg21 #13 a écrit :
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,

msg21 a écrit :

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

msg21 #23 a écrit :

Et quelle est la commande pour lire ligne par ligne

msg21 #13 a écrit :
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