Je cherche une classe Compteur en python.
Pour l'instant je travaille avec ceci :
Merci par avance
def incremente_compteur (fichier="C:\Program Files\Pdf2word\Compteur.ini",
increment=1):
"""Incremente (par default de 1) le compteur du fichier.
Sauvegarde la nouvelle valeure dans le ficheir.
Retourne le nouveau conteur.
"""
f=open(fichier, "r+", 0)
valeur=int(f.read())
valeur=valeur+increment
f.seek(0,0)
f.write(str(valeur))
f.close()
return valeur
Je cherche une classe Compteur en python. Pour l'instant je travaille avec ceci :
Merci par avance
Et écrire ta propre classe compteur ? Ca prend 3 lignes de python.
F. Petitjean
Bonjour,
Je cherche une classe Compteur en python. Pour l'instant je travaille avec ceci :
Merci par avance
def incremente_compteur (fichier="C:Program FilesPdf2wordCompteur.ini", Aie aie on est mal parti utilisez « / » comme séparateur ou un
littéral r"..."
increment=1): """Incremente (par default de 1) le compteur du fichier. Sauvegarde la nouvelle valeure dans le ficheir. Retourne le nouveau conteur. """ f=open(fichier, "r+", 0) valeur=int(f.read()) valeur=valeur+increment f.seek(0,0) f.write(str(valeur)) f.close() return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction ! Pourquoi pas une classe Compteur avec un attribut de classe value ? Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous stockez la valeur courante dans un fichier sous une forme ASCII mais sans fin de ligne, ce n'est pas très logique : soit vous stockez en binaire (plus de transformation valeur=int(f.read() ou str(valeur) pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple) mais alors vous faites l'effort de gérer de vraies lignes de texte avec une fin de ligne 'n'.
Bonjour,
Je cherche une classe Compteur en python.
Pour l'instant je travaille avec ceci :
Merci par avance
def incremente_compteur (fichier="C:Program FilesPdf2wordCompteur.ini",
Aie aie on est mal parti utilisez « / » comme séparateur ou un
littéral r"..."
increment=1):
"""Incremente (par default de 1) le compteur du fichier.
Sauvegarde la nouvelle valeure dans le ficheir.
Retourne le nouveau conteur.
"""
f=open(fichier, "r+", 0)
valeur=int(f.read())
valeur=valeur+increment
f.seek(0,0)
f.write(str(valeur))
f.close()
return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction !
Pourquoi pas une classe Compteur avec un attribut de classe value ?
Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous
stockez la valeur courante dans un fichier sous une forme ASCII mais
sans fin de ligne, ce n'est pas très logique : soit vous stockez en
binaire (plus de transformation valeur=int(f.read() ou str(valeur)
pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple)
mais alors vous faites l'effort de gérer de vraies lignes de texte avec
une fin de ligne 'n'.
Je cherche une classe Compteur en python. Pour l'instant je travaille avec ceci :
Merci par avance
def incremente_compteur (fichier="C:Program FilesPdf2wordCompteur.ini", Aie aie on est mal parti utilisez « / » comme séparateur ou un
littéral r"..."
increment=1): """Incremente (par default de 1) le compteur du fichier. Sauvegarde la nouvelle valeure dans le ficheir. Retourne le nouveau conteur. """ f=open(fichier, "r+", 0) valeur=int(f.read()) valeur=valeur+increment f.seek(0,0) f.write(str(valeur)) f.close() return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction ! Pourquoi pas une classe Compteur avec un attribut de classe value ? Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous stockez la valeur courante dans un fichier sous une forme ASCII mais sans fin de ligne, ce n'est pas très logique : soit vous stockez en binaire (plus de transformation valeur=int(f.read() ou str(valeur) pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple) mais alors vous faites l'effort de gérer de vraies lignes de texte avec une fin de ligne 'n'.
Jean-michel
"F. Petitjean" a écrit dans le message de news: 42544cff$0$13591$
Bonjour,
Je cherche une classe Compteur en python. Pour l'instant je travaille avec ceci :
Merci par avance
def incremente_compteur (fichier="C:Program FilesPdf2wordCompteur.ini", Aie aie on est mal parti utilisez « / » comme séparateur ou un
littéral r"..."
increment=1): """Incremente (par default de 1) le compteur du fichier. Sauvegarde la nouvelle valeure dans le ficheir. Retourne le nouveau conteur. """ f=open(fichier, "r+", 0) valeur=int(f.read()) valeur=valeur+increment f.seek(0,0) f.write(str(valeur)) f.close() return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction ! Pourquoi pas une classe Compteur avec un attribut de classe value ? Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous stockez la valeur courante dans un fichier sous une forme ASCII mais sans fin de ligne, ce n'est pas très logique : soit vous stockez en binaire (plus de transformation valeur=int(f.read() ou str(valeur) pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple) mais alors vous faites l'effort de gérer de vraies lignes de texte avec une fin de ligne 'n'.
Bonsoir, Pourquoi ne pas sauver la valeur avec le module pickle (exemple: pickle.dump(objet,file('nom_fichier','w')) ou voir l'exemple dans la doc standard) ? Ca évite de se poser des questions de format et permet de sauver/restaurer un objet Python. jm
"F. Petitjean" <littlejohn.75@news.free.fr> a écrit dans le message de news:
42544cff$0$13591$626a14ce@news.free.fr...
Bonjour,
Je cherche une classe Compteur en python.
Pour l'instant je travaille avec ceci :
Merci par avance
def incremente_compteur (fichier="C:Program
FilesPdf2wordCompteur.ini",
Aie aie on est mal parti utilisez « / » comme séparateur ou un
littéral r"..."
increment=1):
"""Incremente (par default de 1) le compteur du fichier.
Sauvegarde la nouvelle valeure dans le ficheir.
Retourne le nouveau conteur.
"""
f=open(fichier, "r+", 0)
valeur=int(f.read())
valeur=valeur+increment
f.seek(0,0)
f.write(str(valeur))
f.close()
return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction !
Pourquoi pas une classe Compteur avec un attribut de classe value ?
Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous
stockez la valeur courante dans un fichier sous une forme ASCII mais
sans fin de ligne, ce n'est pas très logique : soit vous stockez en
binaire (plus de transformation valeur=int(f.read() ou str(valeur)
pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple)
mais alors vous faites l'effort de gérer de vraies lignes de texte avec
une fin de ligne 'n'.
Bonsoir,
Pourquoi ne pas sauver la valeur avec le module pickle (exemple:
pickle.dump(objet,file('nom_fichier','w')) ou voir l'exemple dans la doc
standard) ?
Ca évite de se poser des questions de format et permet de sauver/restaurer
un objet Python.
jm
"F. Petitjean" a écrit dans le message de news: 42544cff$0$13591$
Bonjour,
Je cherche une classe Compteur en python. Pour l'instant je travaille avec ceci :
Merci par avance
def incremente_compteur (fichier="C:Program FilesPdf2wordCompteur.ini", Aie aie on est mal parti utilisez « / » comme séparateur ou un
littéral r"..."
increment=1): """Incremente (par default de 1) le compteur du fichier. Sauvegarde la nouvelle valeure dans le ficheir. Retourne le nouveau conteur. """ f=open(fichier, "r+", 0) valeur=int(f.read()) valeur=valeur+increment f.seek(0,0) f.write(str(valeur)) f.close() return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction ! Pourquoi pas une classe Compteur avec un attribut de classe value ? Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous stockez la valeur courante dans un fichier sous une forme ASCII mais sans fin de ligne, ce n'est pas très logique : soit vous stockez en binaire (plus de transformation valeur=int(f.read() ou str(valeur) pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple) mais alors vous faites l'effort de gérer de vraies lignes de texte avec une fin de ligne 'n'.
Bonsoir, Pourquoi ne pas sauver la valeur avec le module pickle (exemple: pickle.dump(objet,file('nom_fichier','w')) ou voir l'exemple dans la doc standard) ? Ca évite de se poser des questions de format et permet de sauver/restaurer un objet Python. jm
F. Petitjean
Bonsoir, Pourquoi ne pas sauver la valeur avec le module pickle (exemple: pickle.dump(objet,file('nom_fichier','w')) ou voir l'exemple dans la doc standard) ? Ca évite de se poser des questions de format et permet de sauver/restaurer un objet Python. jm
Effectivement, je n'avais pas pensé à suggérer cette méthode.
Merci Jean-Michel
Bonsoir,
Pourquoi ne pas sauver la valeur avec le module pickle (exemple:
pickle.dump(objet,file('nom_fichier','w')) ou voir l'exemple dans la doc
standard) ?
Ca évite de se poser des questions de format et permet de sauver/restaurer
un objet Python.
jm
Effectivement, je n'avais pas pensé à suggérer cette méthode.
Bonsoir, Pourquoi ne pas sauver la valeur avec le module pickle (exemple: pickle.dump(objet,file('nom_fichier','w')) ou voir l'exemple dans la doc standard) ? Ca évite de se poser des questions de format et permet de sauver/restaurer un objet Python. jm
Effectivement, je n'avais pas pensé à suggérer cette méthode.
Merci Jean-Michel
David Josty
"F. Petitjean" a écrit dans le message de news:42544cff$0$13591$
Bonjour,
Je cherche une classe Compteur en python. Pour l'instant je travaille avec ceci :
Aie aie on est mal parti utilisez « / » comme séparateur ou un littéral r"..."
increment=1): """Incremente (par default de 1) le compteur du fichier. Sauvegarde la nouvelle valeure dans le ficheir. Retourne le nouveau conteur. """ f=open(fichier, "r+", 0) valeur=int(f.read()) valeur=valeur+increment f.seek(0,0) f.write(str(valeur)) f.close() return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction ! Pourquoi pas une classe Compteur avec un attribut de classe value ? Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous stockez la valeur courante dans un fichier sous une forme ASCII mais sans fin de ligne, ce n'est pas très logique : soit vous stockez en binaire (plus de transformation valeur=int(f.read() ou str(valeur) pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple) mais alors vous faites l'effort de gérer de vraies lignes de texte avec une fin de ligne 'n'.
Merci pour votre aide, je m'explique. Effectivement, je demande une classe, et je propose une fonction. En effet, je ne suis pas tres a l'aise avec les classes, donc je presente une fonction bricolée, qui fonctionne afin d'éclairée d'avantage d'avantage sur mon besoin. Peux être pouvez vous me conseiller sur un site web expliquant les classes en python ! Merci pour soutient
"F. Petitjean" <littlejohn.75@news.free.fr> a écrit dans le message de
news:42544cff$0$13591$626a14ce@news.free.fr...
Bonjour,
Je cherche une classe Compteur en python.
Pour l'instant je travaille avec ceci :
Aie aie on est mal parti utilisez « / » comme séparateur ou un
littéral r"..."
increment=1):
"""Incremente (par default de 1) le compteur du fichier.
Sauvegarde la nouvelle valeure dans le ficheir.
Retourne le nouveau conteur.
"""
f=open(fichier, "r+", 0)
valeur=int(f.read())
valeur=valeur+increment
f.seek(0,0)
f.write(str(valeur))
f.close()
return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction !
Pourquoi pas une classe Compteur avec un attribut de classe value ?
Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous
stockez la valeur courante dans un fichier sous une forme ASCII mais
sans fin de ligne, ce n'est pas très logique : soit vous stockez en
binaire (plus de transformation valeur=int(f.read() ou str(valeur)
pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple)
mais alors vous faites l'effort de gérer de vraies lignes de texte avec
une fin de ligne 'n'.
Merci pour votre aide, je m'explique.
Effectivement, je demande une classe, et je propose une fonction.
En effet, je ne suis pas tres a l'aise avec les classes, donc je presente
une fonction bricolée,
qui fonctionne afin d'éclairée d'avantage d'avantage sur mon besoin.
Peux être pouvez vous me conseiller sur un site web expliquant les classes
en python !
Merci pour soutient
Aie aie on est mal parti utilisez « / » comme séparateur ou un littéral r"..."
increment=1): """Incremente (par default de 1) le compteur du fichier. Sauvegarde la nouvelle valeure dans le ficheir. Retourne le nouveau conteur. """ f=open(fichier, "r+", 0) valeur=int(f.read()) valeur=valeur+increment f.seek(0,0) f.write(str(valeur)) f.close() return valeur
Je ne comprends pas : vous demandez une classe Compteur et vous proposez
une fonction ! Pourquoi pas une classe Compteur avec un attribut de classe value ? Et comme je suis d'humeur tâtillonne ce soir, je remarque que vous stockez la valeur courante dans un fichier sous une forme ASCII mais sans fin de ligne, ce n'est pas très logique : soit vous stockez en binaire (plus de transformation valeur=int(f.read() ou str(valeur) pour l'écritue, soit vous conservez une forme ASCII (.INI par exemple) mais alors vous faites l'effort de gérer de vraies lignes de texte avec une fin de ligne 'n'.
Merci pour votre aide, je m'explique. Effectivement, je demande une classe, et je propose une fonction. En effet, je ne suis pas tres a l'aise avec les classes, donc je presente une fonction bricolée, qui fonctionne afin d'éclairée d'avantage d'avantage sur mon besoin. Peux être pouvez vous me conseiller sur un site web expliquant les classes en python ! Merci pour soutient
Jerome
Merci pour votre aide, je m'explique. Effectivement, je demande une classe, et je propose une fonction. En effet, je ne suis pas tres a l'aise avec les classes, donc je presente une fonction bricolée, qui fonctionne afin d'éclairée d'avantage d'avantage sur mon besoin. Peux être pouvez vous me conseiller sur un site web expliquant les classes en python ! Merci pour soutient
http://docs.python.org/tut/node11.html...
Mais pour apprendre à programmer en objet, il suffit d'un bon cours d'objet, pas un cours de python forcément. Google est ton ami.
Bon courage
Merci pour votre aide, je m'explique.
Effectivement, je demande une classe, et je propose une fonction.
En effet, je ne suis pas tres a l'aise avec les classes, donc je presente
une fonction bricolée,
qui fonctionne afin d'éclairée d'avantage d'avantage sur mon besoin.
Peux être pouvez vous me conseiller sur un site web expliquant les classes
en python !
Merci pour soutient
http://docs.python.org/tut/node11.html...
Mais pour apprendre à programmer en objet, il suffit d'un bon cours
d'objet, pas un cours de python forcément. Google est ton ami.
Merci pour votre aide, je m'explique. Effectivement, je demande une classe, et je propose une fonction. En effet, je ne suis pas tres a l'aise avec les classes, donc je presente une fonction bricolée, qui fonctionne afin d'éclairée d'avantage d'avantage sur mon besoin. Peux être pouvez vous me conseiller sur un site web expliquant les classes en python ! Merci pour soutient
http://docs.python.org/tut/node11.html...
Mais pour apprendre à programmer en objet, il suffit d'un bon cours d'objet, pas un cours de python forcément. Google est ton ami.
Bon courage
jb
Bonsoir,
J'ai un petit script qui pourrait faire ce que tu demandes, et vu qu'il y a des gourous python sur cette liste, j'espere avoir des indications sur comment améliorer mon prog qui n'est peut etre pas tres pythonesque et pas tres efficient. Pour un compteur, pas de risques de surcharge de cpu ;) mais ce serait interessant de savoir ou ca pourrait pecher
Adaptes le a tes besoins et voila
J'attends vos commentaires
MErci
Julien
# Fichier Compteur.py import os
class CompteurSimple:
# Compteur simple # # basé sur un fichier texte # met a jour le fichier a chaque incrementation # # A utiliser comme ca d'un autre module : # # import Compteur # # monCompteur=Compteur.CompteurSimple("NomDuFichierOuStockerLeCompte") # #
def __init__(self,baseFile="compteur"): # initialisation du compteur self.compte=0 self.fileNameºseFile self._initCompteur() def _initCompteur(self): # lit le fichier pour recuperer la valeur actuelle # laisse a zero sinon if os.path.exists(self.fileName): try: self.compte=int(file(self.fileName,'r').readlines()[0]) except: pass
def __str__(self): # surcharge de str return str(self.compte)
def getCompte(self): # autre methode qui retoure le compte return str(self)
def increment(self,inc=1): # incremente le coompteur puis rafraichit le fichier self.compte+=inc self._writeCompteur()
if __name__=="__main__": # test du module cpt=CompteurSimple() print cpt print "compteur : %s" % cpt cpt.increment() print "compteur : %s" % cpt cpt.increment(5) print "compteur : %s" % cpt
Bonsoir,
J'ai un petit script qui pourrait faire ce que tu demandes, et vu qu'il
y a des gourous python sur cette liste, j'espere avoir des indications sur
comment améliorer mon prog qui n'est peut etre pas tres pythonesque et pas
tres efficient. Pour un compteur, pas de risques de surcharge de cpu ;) mais
ce serait interessant de savoir ou ca pourrait pecher
Adaptes le a tes besoins et voila
J'attends vos commentaires
MErci
Julien
# Fichier Compteur.py
import os
class CompteurSimple:
# Compteur simple
#
# basé sur un fichier texte
# met a jour le fichier a chaque incrementation
#
# A utiliser comme ca d'un autre module :
#
# import Compteur
#
# monCompteur=Compteur.CompteurSimple("NomDuFichierOuStockerLeCompte")
#
#
def __init__(self,baseFile="compteur"):
# initialisation du compteur
self.compte=0
self.fileNameºseFile
self._initCompteur()
def _initCompteur(self):
# lit le fichier pour recuperer la valeur actuelle
# laisse a zero sinon
if os.path.exists(self.fileName):
try:
self.compte=int(file(self.fileName,'r').readlines()[0])
except:
pass
def __str__(self):
# surcharge de str
return str(self.compte)
def getCompte(self):
# autre methode qui retoure le compte
return str(self)
def increment(self,inc=1):
# incremente le coompteur puis rafraichit le fichier
self.compte+=inc
self._writeCompteur()
J'ai un petit script qui pourrait faire ce que tu demandes, et vu qu'il y a des gourous python sur cette liste, j'espere avoir des indications sur comment améliorer mon prog qui n'est peut etre pas tres pythonesque et pas tres efficient. Pour un compteur, pas de risques de surcharge de cpu ;) mais ce serait interessant de savoir ou ca pourrait pecher
Adaptes le a tes besoins et voila
J'attends vos commentaires
MErci
Julien
# Fichier Compteur.py import os
class CompteurSimple:
# Compteur simple # # basé sur un fichier texte # met a jour le fichier a chaque incrementation # # A utiliser comme ca d'un autre module : # # import Compteur # # monCompteur=Compteur.CompteurSimple("NomDuFichierOuStockerLeCompte") # #
def __init__(self,baseFile="compteur"): # initialisation du compteur self.compte=0 self.fileNameºseFile self._initCompteur() def _initCompteur(self): # lit le fichier pour recuperer la valeur actuelle # laisse a zero sinon if os.path.exists(self.fileName): try: self.compte=int(file(self.fileName,'r').readlines()[0]) except: pass
def __str__(self): # surcharge de str return str(self.compte)
def getCompte(self): # autre methode qui retoure le compte return str(self)
def increment(self,inc=1): # incremente le coompteur puis rafraichit le fichier self.compte+=inc self._writeCompteur()
__all__ = ('CompteurSimple',) # au cas où on voudrait faire # from ... import *
import os
class CompteurSimple: class CompteurSimple(object):
"""
# Compteur simple # # basé sur un fichier texte # met a jour le fichier a chaque incrementation # # A utiliser comme ca d'un autre module : # # import Compteur # # monCompteur=Compteur.CompteurSimple("NomDuFichierOuStockerLeCompte") # # """
et éventuellement mettre un copier-coller d'une session interactive utilisant cette classe pour ensuite simplement appeler doctest.
def __init__(self,baseFile="compteur"): """CompteurSimple([baseFile, [start]]) -> a simple counter
""" # les « doc strings » ce n'est pas fait pour les chiens # et pourquoi ne pas avoir un paramètre start=0 ?
# initialisation du compteur self.compte=0 self.compte = start
self.fileNameºseFile self._initCompteur()
def _initCompteur(self): '''lit le fichier pour récupérer la valeur actuelle.
laisse à zéro sinon. '''
if os.path.exists(self.fileName): try: self.compte=int(file(self.fileName,'r').readlines()[0]) except: pass Arg! vous combinez deux techniques différentes pour traiter (mal) le
problème d'accès au fichier (pas de fichier ou pas de droits pour lire) Lisez les explications du MartelliBot : http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52291 et vous commetez les péchés véniels d'ouvrir avec file et non open et de ne pas fermer le fichier. Vous récidivez en commettant le péché grave d'utiliser « rxcept » non suivi de la classe d'exception. Cela fait beaucoup pour 5 lignes de code, vous ne trouvez pas ? try: fin = open(self.fileName) except IOError: # si c'est un problème de droit, on est mal parti import errno if exc.errno == errno.ENOENT: return # pas de fichier ? pas de problème : (en # supposant qu'on le créera plus tard) raise line = fin.readline() # une ligne devrait suffire fin.close() try: self.compte = int(line) except ValueError: pass # on pourrait se poser la question du caractère cavalier de la démarche qui consiste à écraser un fichier dont on sait qu'il ne convient pas. Je serais tenté de lever une exception BadFile('file %s is not a counter' % self.fileName)
def __str__(self): # surcharge de str C'est une bonne idée
return str(self.compte)
def getCompte(self): # autre methode qui retoure le compte return str(self)
def increment(self,inc=1): # incremente le coompteur puis rafraichit le fichier self.compte+=inc Passez pylint (de logilab) et vous aurez un avertissemnt sur cette ligne
__all__ = ('CompteurSimple',) # au cas où on voudrait faire
# from ... import *
import os
class CompteurSimple:
class CompteurSimple(object):
"""
# Compteur simple
#
# basé sur un fichier texte
# met a jour le fichier a chaque incrementation
#
# A utiliser comme ca d'un autre module :
#
# import Compteur
#
# monCompteur=Compteur.CompteurSimple("NomDuFichierOuStockerLeCompte")
#
#
"""
et éventuellement mettre un copier-coller d'une session interactive
utilisant cette classe pour ensuite simplement appeler doctest.
def __init__(self,baseFile="compteur"):
"""CompteurSimple([baseFile, [start]]) -> a simple counter
"""
# les « doc strings » ce n'est pas fait pour les chiens
# et pourquoi ne pas avoir un paramètre start=0 ?
# initialisation du compteur
self.compte=0
self.compte = start
self.fileNameºseFile
self._initCompteur()
def _initCompteur(self):
'''lit le fichier pour récupérer la valeur actuelle.
laisse à zéro sinon.
'''
if os.path.exists(self.fileName):
try:
self.compte=int(file(self.fileName,'r').readlines()[0])
except:
pass
Arg! vous combinez deux techniques différentes pour traiter (mal) le
problème d'accès au fichier (pas de fichier ou pas de droits pour lire)
Lisez les explications du MartelliBot :
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52291
et vous commetez les péchés véniels d'ouvrir avec file et non open et
de ne pas fermer le fichier. Vous récidivez en commettant le péché grave
d'utiliser « rxcept » non suivi de la classe d'exception. Cela fait
beaucoup pour 5 lignes de code, vous ne trouvez pas ?
try:
fin = open(self.fileName)
except IOError:
# si c'est un problème de droit, on est mal parti
import errno
if exc.errno == errno.ENOENT:
return # pas de fichier ? pas de problème : (en
# supposant qu'on le créera plus tard)
raise
line = fin.readline() # une ligne devrait suffire
fin.close()
try:
self.compte = int(line)
except ValueError:
pass # on pourrait se poser la question du caractère
cavalier de la démarche qui consiste à écraser un fichier
dont on sait qu'il ne convient pas. Je serais tenté de lever
une exception BadFile('file %s is not a counter' % self.fileName)
def __str__(self):
# surcharge de str
C'est une bonne idée
return str(self.compte)
def getCompte(self):
# autre methode qui retoure le compte
return str(self)
def increment(self,inc=1):
# incremente le coompteur puis rafraichit le fichier
self.compte+=inc
Passez pylint (de logilab) et vous aurez un avertissemnt sur cette ligne
__all__ = ('CompteurSimple',) # au cas où on voudrait faire # from ... import *
import os
class CompteurSimple: class CompteurSimple(object):
"""
# Compteur simple # # basé sur un fichier texte # met a jour le fichier a chaque incrementation # # A utiliser comme ca d'un autre module : # # import Compteur # # monCompteur=Compteur.CompteurSimple("NomDuFichierOuStockerLeCompte") # # """
et éventuellement mettre un copier-coller d'une session interactive utilisant cette classe pour ensuite simplement appeler doctest.
def __init__(self,baseFile="compteur"): """CompteurSimple([baseFile, [start]]) -> a simple counter
""" # les « doc strings » ce n'est pas fait pour les chiens # et pourquoi ne pas avoir un paramètre start=0 ?
# initialisation du compteur self.compte=0 self.compte = start
self.fileNameºseFile self._initCompteur()
def _initCompteur(self): '''lit le fichier pour récupérer la valeur actuelle.
laisse à zéro sinon. '''
if os.path.exists(self.fileName): try: self.compte=int(file(self.fileName,'r').readlines()[0]) except: pass Arg! vous combinez deux techniques différentes pour traiter (mal) le
problème d'accès au fichier (pas de fichier ou pas de droits pour lire) Lisez les explications du MartelliBot : http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52291 et vous commetez les péchés véniels d'ouvrir avec file et non open et de ne pas fermer le fichier. Vous récidivez en commettant le péché grave d'utiliser « rxcept » non suivi de la classe d'exception. Cela fait beaucoup pour 5 lignes de code, vous ne trouvez pas ? try: fin = open(self.fileName) except IOError: # si c'est un problème de droit, on est mal parti import errno if exc.errno == errno.ENOENT: return # pas de fichier ? pas de problème : (en # supposant qu'on le créera plus tard) raise line = fin.readline() # une ligne devrait suffire fin.close() try: self.compte = int(line) except ValueError: pass # on pourrait se poser la question du caractère cavalier de la démarche qui consiste à écraser un fichier dont on sait qu'il ne convient pas. Je serais tenté de lever une exception BadFile('file %s is not a counter' % self.fileName)
def __str__(self): # surcharge de str C'est une bonne idée
return str(self.compte)
def getCompte(self): # autre methode qui retoure le compte return str(self)
def increment(self,inc=1): # incremente le coompteur puis rafraichit le fichier self.compte+=inc Passez pylint (de logilab) et vous aurez un avertissemnt sur cette ligne
cpt.write(str(self.compte)) ARg: la ligne n'est pas complète sans fin de ligne.
cpt.write(str(self.compte) + 'n')
cpt.close()
if __name__=="__main__": # test du module cpt=CompteurSimple() print cpt print "compteur : %s" % cpt cpt.increment() print "compteur : %s" % cpt cpt.increment(5) print "compteur : %s" % cpt
Essayez pylint et il vous affichera pas mal de choses. Sur un script
aussi simple et aussi court vous pouvez obtenir 8 sur 10 en ajoutant les élements indiqués dans les avertissements : doc strings, ...
Cordialement
jb
Essayez pylint et il vous affichera pas mal de choses. Sur un script aussi simple et aussi court vous pouvez obtenir 8 sur 10 en ajoutant les élements indiqués dans les avertissements : doc strings, ...
Merci pour tous ces conseils !!
Cordialement
Cordialement,
Julien
Essayez pylint et il vous affichera pas mal de choses. Sur un script
aussi simple et aussi court vous pouvez obtenir 8 sur 10 en ajoutant les
élements indiqués dans les avertissements : doc strings, ...
Essayez pylint et il vous affichera pas mal de choses. Sur un script aussi simple et aussi court vous pouvez obtenir 8 sur 10 en ajoutant les élements indiqués dans les avertissements : doc strings, ...