Débutant bloqué par des if
Réponses:
9
Visites:
0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum.
Inscrivez-vous maintenant
Débutant bloqué par des if
Posté par
bartoch
le
25/08/2010 16:47
Bonjour,
je début en Python et je suis bloqué par un petit if qui compare une variable booléen. Ce petit code me permet de modifier 2 fichiers csv, il retire les quottes puis le restitue avec le nouveau format. le seul problème que j'ai est le IF, je veux qu'il ne rentre pas dans in1 ou in2 si le fichier n'est pas présent. Je veux que dés le début il vérifie la présence du fichier puis face la modif que du fichier présent. Au passage, je ne sais pas quoi mettre au ELSE final, comment quitter le programme proprement ? MERCI import os import os,shutil import os.path in1 = os.path.isfile("c:\\in1.csv" ) in2 = os.path.isfile("c:\\in2.csv" ) if in1 == true: Src = open("c:\\in1.csv","r" ) Dest = open("c:\\out1.csv","w" ) i=Src.read() o=i.replace('"','') Dest.write(o) Src.close() Dest.close() shutil.copyfile("C:\\out1.csv","C:\\in1.csv" ) os.remove('c:\\out1.csv') elif in2 == true: Src = open("c:\\in2.csv","r" ) Dest = open("c:\\out2.csv","w" ) i=Src.read() o=i.replace('"','') Dest.write(o) Src.close() Dest.close() shutil.copyfile("C:\\out2.csv","C:\\in2.csv" ) os.remove('c:\\out2.csv') else: |
Re: Débutant bloqué par des if
Posté par
fredogo
le
25/08/2010 18:39
Bonsoir,
Eh bien beaucoup de choses 1) Tester l'ouverture d'un fichier Il est plus simple d'utiliser le bloc "try-except" code: try:
2) Les conditions code: if in2==True:est équivalent à code: if in2:Si on voulait tester un booléen avec une valeur à False code: if not in2:Tout ces tests sont inutiles, car le bloc try-except fait correctement son travail. 3) Le choix des variables code: i=Src.read()
est un code très moche. Choisir le bon nom de ses variables est important pour une continuité de développement du code et pour la lecture à d'autres codeurs, comme sur un forum par exemple J'écrirais plutôt code: data=Src.read()
4) Ton problème Je pense qu'il est résolu, car comme je l'ai dis précédemment la boucle try-except va faire son travail. Une fois le test de l'existence de ton fichier, il y a que 2 solutions possibles. Soit ton fichier existe, il continuera la suite de ton code. Soit ton fichier n'existe pas, on capture l'exception IOError et on indique que ce fichier n'existe pas etquittera le programme proprement. 5) Pour plus tard Il va falloir regarder du côté des fonctions qui te permettront d'éviter les tâches répétitives. J'espère avoir été le plus explicite possible |
Re: Débutant bloqué par des if
Posté par
bartoch
le
26/08/2010 09:04
Bonjour,
Merci beaucoup. Pour ce que tu m'as dit sur le try: en fait je veux qu'il continue et non se coupe directement. Si le 1ere fichier n'est pas là ca veut dire qu'il ne traite pas le 2 eme vu qu'il aura un IOError. Je viens de tester le if in1: mais même si le fichier n'existe pas il va renter dans le IF in1: alors qu'il a une valeur 'false' J'ai cette erreur: File "C:\prog.py", line 8 Src = open("c:\\in1.csv","r" ) ^ IndentationError: expected an indented block |
Re: Débutant bloqué par des if
Posté par
fredogo
le
26/08/2010 09:35
Pour ce que tu m'as dit sur le try: en fait je veux qu'il continue et non se coupe directement. Eh bien c'est pas compliqué à faire, je t'ai donné les bases, pas les réponses. Ce n'est pas à moi de faire ton code mais bien à toi. Je viens de tester le if in1: mais même si le fichier n'existe pas il va renter dans le IF in1: alors qu'il a une valeur 'false' Tu n'as pas lu ce que j'ai écris, je suis blazé Je t'ai dis que ce test était maintenant inutile car tu utilisais try-except. Encore une fois je t'ai donné une base pour coder plus lisiblement une condition if. Ce qui ne veut pas dire que tu dois l'utiliser dans ton code. J'ai cette erreur: Oui c'est une erreur d'indentation, il te le dit, donc tu indentes Pourquoi il n'a pas prit mon indentation? Je ne sais pas. Ce qui donne code: try:
|
Re: Débutant bloqué par des if
Posté par
bartoch
le
26/08/2010 13:35
J'ai trouvé !
Merci à toi, je comprend mieux ce que veut dire indentation. code: import os
|
Re: Débutant bloqué par des if
Posté par
bartoch
le
26/08/2010 13:36
J'ai trouvé !
Merci à toi, je comprend mieux ce que veut dire indentation. code: import os
|
Re: Débutant bloqué par des if
Posté par
bartoch
le
26/08/2010 14:08
Maintenant je voulais qu'il indique le nom du fichier manquant sans le taper à la main.
code: try:
Il m'indique que src n'est pas défini, je pensais que le temps du TRY il allait quand meme alimenter la variable src et donc pouvoir afficher le contenu. |
Re: Débutant bloqué par des if
Posté par
fredogo
le
26/08/2010 14:50
Il m'indique que src n'est pas défini C'est justifié, déjà se ne serait pas src mais Src, python est sensible à la casse. Qui puis-est Src ne renvoi pas un string, donc même si tu modifies ça ne fonctionnera toujours pas. Le code correct (je pense): code: import os.path
Attention code non testé! |
Re: Débutant bloqué par des if
Posté par
bartoch
le
26/08/2010 15:03
Ca fct, un grand merci à toi.
|
Re: Débutant bloqué par des if
Posté par
eyquem
le
27/08/2010 22:50
DANS UN PREMIER TEMPS , je me suis dit qu’on peut condenser le code auquel vous aboutissez:
code: import os.path,shutil
Le statement with ... as est disponible depuis la version 2.6. Dans la version 2.5 il faut mettre from __future__ import with_statement en tête du code pour pouvoir utiliser ce statement. DANS UN DEUXIEME TEMPS, j’ai testé: code: filename = 'C:\\Python27\\NEWS.txt'
me donne code: La longueur de C:\Python27\NEWS.txt est 233473
Donc, bien qu’en Python la casse compte, les noms de fichier dans open() sont une exception: on peut écrire aussi bien open(’NEWS.TX’) que open(’NewS.TxT’) ou open(’neWs.TXT’) , etc. Mais alors, au fait ! , comment est-on sûr du fichier que l’on ouvre avec une casse donnée s’il existe dans le répertoire un autre fichier avec le même nom dans une autres casse ? Eh bien sous Windows en tous cas, deux fichiers différents avec des casses différentes du même nom identique, cela ne se peut pas. Si on essaie de créer un deuxième fichier avec une casse différente, l’OS Windows signale qu’il ne peut pas faire l’opération demandée parce qu’il existe déjà un fichier avec le même nom. Ouf. J’avoue que je ne connaissais pas ces deux caractéristiques concernant les noms de fichiers dans open() de Python et sous Windows. Sous d’autres OS, je ne sais pas ce qu’il en est. Tout ça pour dire que de ce fait, l’instruction code: shutil.copyfile("C:\\out1.csv","C:\\in1.csv")
est équivalente à code: shutil.copyfile("c:\\out1.csv","c:\\in1.csv")
Examinons alors ce que fait ton code: code: with open("c:\\in1.csv","r" ) as Src,\
Total de l’opération: on a simplement modifié le contenu du fichier "c:\\in1.csv" TROISIEME TEMPS: je propose une manière plus simple de faire la même chose: code: from os.path import isfile
Et pour rendre ça générique: code: from os.path import isfile
|




