Lecture, insertion/création fichier

Lecture, insertion/création fichier - Python - Programmation

Marsh Posté le 20-06-2012 à 21:30:40    

Bonjour,
 
Je découvre python depuis ce matin et je sature un peu là.
 
Mon soucis est que j'ai un code de calcul qui me donne un fichier résultat et j'aimerai faire un script python afin de créer un fichier txt avec juste le tableau que le fichier résultat me donne.
 
C'est pour cela que je vous demande dans un premier temps, quelle était la demarche pour lire seulement les lignes 5 à 10 d'un fichier(mais pas les 5 premières), puis la démarche pour copier ces lignes dans un fichier txt qu'il faut créer.
 
voici mon script pour le moment :
 
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
fichier = open("resultat.resu", "r" )
contenu = fichier.read()
print(contenu)
fichier.close()
 
Je vous remercie d'avance de votre aide.


---------------
C'est sympa d'être important mais c'est plus important d'être sympa.
Reply

Marsh Posté le 20-06-2012 à 21:30:40   

Reply

Marsh Posté le 22-06-2012 à 11:11:35    

ccadic a écrit :

C'est pour cela que je vous demande dans un premier temps, quelle était la demarche pour lire seulement les lignes 5 à 10 d'un fichier(mais pas les 5 premières)


La manière la plus précise est d'utiliser seek() sur le fichier pour tenter de trouver la 5e ligne.
 
La manière la plus simple, c'est de lire et ignorer les premières lignes, soit avec file.readlines (qui renvoie un objet list) et une slice, soit (mieux, pour autant que je sois concerné, mais plus avancé) en traitant le fichier comme un itérable et en utilisant islice dessus.

ccadic a écrit :

puis la démarche pour copier ces lignes dans un fichier txt qu'il faut créer.


Ouvrir le fichier en mode d'écriture, puis envoyer du contenu dedans (avec writelines() ou write(), attention ils l'ajoutent pas de newline il faut soit les avoir dans le contenu d'origine soit les ajouter à la main).

ccadic a écrit :


voici mon script pour le moment :

Code :
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. fichier = open("resultat.resu", "r" )
  5. contenu = fichier.read()
  6. print(contenu)
  7. fichier.close()


 
Je vous remercie d'avance de votre aide.


Faudrait apprendre à utiliser with aussi: http://effbot.org/zone/python-with-statement.htm


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-06-2012 à 12:24:02    

Voici mon script et il fonctionne :
 
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
fichier = open("LinearStatics_Plane_Strainmeshbarre.resu", 'r')
lines = fichier.readlines()
fichier.close()
 
resu = open("resultat.txt","w" )
for ligne in lines[36:77]:
    resu.write(ligne)
resu.close()
 
Mais peut-on l'améliorer ??

Reply

Marsh Posté le 22-06-2012 à 12:42:12    

ccadic a écrit :

Voici mon script et il fonctionne :

 

#!/usr/bin/python
# -*- coding: utf-8 -*-

 

fichier = open("LinearStatics_Plane_Strainmeshbarre.resu", 'r')
lines = fichier.readlines()
fichier.close()

 

resu = open("resultat.txt","w" )
for ligne in lines[36:77]:
    resu.write(ligne)
resu.close()

 

Mais peut-on l'améliorer ??


oui.

Code :
  1. from itertools import islice
  2.  
  3. with open('LinearStatics_Plane_Strainmeshbarre.resu', 'r') as input:
  4.    to_write = islice(input, 36, 77)
  5.    with open('resultat.txt', 'w') as output:
  6.        output.writelines(to_write)


Message édité par masklinn le 22-06-2012 à 12:42:27

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-06-2012 à 13:27:59    

Merci beaucoup !!
 
Cependant, j'aimerai savoir l'utilité et les bienfaits de cette amélioration par rapport à "l'ancien".

Reply

Marsh Posté le 22-06-2012 à 13:59:59    

ccadic a écrit :

Merci beaucoup !!Cependant, j'aimerai savoir l'utilité et les bienfaits de cette amélioration par rapport à "l'ancien".


Plus court et plus moderne, moins de code donc moins de chances de bugs
 
`with` assure que le fichier sera correctement fermé dans tous les cas une fois qu'on sort de sa scope, même s'il y a une exception ou autre.
 
readlines va lire tout le fichier en une fois, puis créer une liste en mémoire. Itérer sur le fichier directement évite de charger la fin du fichier et permet d'utiliser le fichier dans des contextes qui n'ont pas besoin de savoir que c'est un fichier.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-06-2012 à 14:06:35    

OK merci de l'explication !!
 
Pouvez-vous me conseiller un site pour me documenter et faire "des TP" pour m'améliorer ??


Message édité par ccadic le 22-06-2012 à 14:07:31
Reply

Marsh Posté le 22-06-2012 à 14:23:53    

Là comme ça, pas spécialement. Je suggérerais de suivre les mailing lists python-list@python.org et tutor@python.org, et de suivre un tuto genre learning python the hard way. Peut-être également trainer sur le tag Python dans stackoverflow ça permet d'apprendre des choses.
 
Après, souscrire au RSS planet python.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed