Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1399 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [python] wip synchroniser des répertoires (newb)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[python] wip synchroniser des répertoires (newb)

n°709609
kayasax
Posté le 27-04-2004 à 12:52:59  profilanswer
 

Bonjour,
suite à la fin de ma lecture du tuto python, j'essaie de m'y mettre  [:banzai] (c'est pas gagné).
Comme 1er prog j'ai pensé à un synchroniseur de dossiers (fonctionalités très simples au début en ligne de commande interface graphique par la suite).
Après avoir bataillé quelque temps avec la doc pyton j'en suis là (c'est vraiment le début) :


from sys import *
from os import *
from filecmp import *
 
def verif():
    if len(argv)<=3:
        exit("Utilisation : ce programme necessite au moins 3\
        arguments : le repertoire source, le repertoire cible et le\
        mode de synchronisation (ex force pour copier l'integalite\
        des fichiers de sources vers cible)" )
 
def force(source, cible):
 
    list=dircmp(source,cible)
    list.report()
    for i in list.left_list:
        print i
        #copier les fichiers de source vers cible    
 
# Debut prog principal
 
verif()  #verif nbre parametres
 
#verification de l'existence des repertoires
 
if access(argv[1],F_OK)==0:
    print "Le dossier source n'existe pas, verifier et recommencer"
 
if access(argv[2],F_OK)==0:
    while 1:
        rep=raw_input("Le dossier cible n'existe pas, voulez vous le creer o/n ?" )
        if rep=="n":
            exit("Abandon utilisateur" )
        if rep=="o":
            mkdir(argv[2])
            break
     
if argv[3]=="force":
    force(argv[1],argv[2])


 
à première vue je vous semble pas trop mal parti ?  
 
ma question est de savoir si il existe un module pour copier des fichiers d'un repertoire vers un autre ou faut il appeler une commande système ?
pis si vous avez des conseils...
Merci.


Message édité par kayasax le 27-04-2004 à 15:17:37
mood
Publicité
Posté le 27-04-2004 à 12:52:59  profilanswer
 

n°709634
lorill
Posté le 27-04-2004 à 13:14:18  profilanswer
 

pour les parametres, au lieu des argv :  
http://docs.python.org/lib/module-getopt.html
 
pour les fichiers :
http://docs.python.org/lib/module-shutil.html

n°709681
kayasax
Posté le 27-04-2004 à 14:10:05  profilanswer
 

merci !

n°709724
chaica
Posté le 27-04-2004 à 14:41:42  profilanswer
 

Tu ferais bien d'orienter ton programme en poo, python est fait pour ça.
 
Tu n'utilises pas les exceptions. Si jamais une erreur inattendue surgie, ton prog va se planter sans indiquer de cause. Chaque appel système par exemple doit être protégé pour t'indiquer un problème éventuel.

n°709759
kayasax
Posté le 27-04-2004 à 15:15:27  profilanswer
 

chaica a écrit :

Tu ferais bien d'orienter ton programme en poo, python est fait pour ça.
 
Tu n'utilises pas les exceptions. Si jamais une erreur inattendue surgie, ton prog va se planter sans indiquer de cause. Chaque appel système par exemple doit être protégé pour t'indiquer un problème éventuel.


j'ai encore beaucoup de mal avec les objets moi ! pour l'instant je ne vois pas l'interet de passer en objet (que mettre dedans à part un path ??)
à quel niveau tu me suggeres d'utiliser les exceptions ? genre ca ?
try :
    access(argv[1],F_OK)
except :
    print 'erreur'
 
 
C'est moi ou la doc de python est super mal foutue ?? la je cherche une fonction pour convertir des chemins windows en chemin unix mais ... trouve pas !  :??:  
 
 :hello:  
 

n°709767
lorill
Posté le 27-04-2004 à 15:21:20  profilanswer
 

kayasax a écrit :


C'est moi ou la doc de python est super mal foutue ?? la je cherche une fonction pour convertir des chemins windows en chemin unix mais ... trouve pas !  :??:  


je serais tenté de dire que c'est toi  [:sinclaire]  
http://docs.python.org/lib/module-os.path.html

n°709774
chaica
Posté le 27-04-2004 à 15:24:49  profilanswer
 

Citation :

C'est moi ou la doc de python est super mal foutue ?? la je cherche une fonction pour convertir des chemins windows en chemin unix mais ... trouve pas !  :??:  


 
Ca vient de toi en effet.
 
Cas typique de l'utilisation d'une exception:

Code :
  1. try:
  2.     mkdir(argv[2])
  3. except OSError, msg:
  4.     print msg


 
Quant à l'objet, ton programme étant à but didactique, tu ferais bien d'y passer.
Enfin importer brutalement comme tu fais tous les composants d'un module, ça peut être risqué.

n°709787
kayasax
Posté le 27-04-2004 à 15:34:40  profilanswer
 

j'ai remplacé l'importation des modules :


from sys import argv,exit
from os import path,access
from filecmp import dircmp
from shutil import copy


 
mais du coup ca merdouille je comprends pas pourquoi :

 File "E:\Mes scripts python\paraaetre.py", line 27, in ?
    if access(argv[1],F_OK)==0:
NameError: name 'F_OK' is not defined


 
 
j'avais bien trouvé la page sur le module os.path
mais justement il est marqué que pas mal de fonctions ne fonctionnent pas bien sous windows, que splitunc() et ismount() eux fonctionnent mais sans plus d'explication ...
 
exemple :

>>> listdir('c:\temp')
 
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in -toplevel-
    listdir('c:\temp')
WindowsError: [Errno 123] Syntaxe du nom de fichier, de répertoire ou de volume incorrecte: 'c:\temp/*.*'
listir('c:/temp') fonctionne bien lui ...
 
si j'essaie de normaliser le path :
>>> print os.path.normpath('c:\temp')
c: emp
>>>  
-> \t est converti en tabulation  
 


 
Ok pour les exceptions (habitude à prendre je suppose)
 
Pour en revenir à l'objet, il faut que je considère l'ensemble de mon appli comme étant une instance d'une classe c'est bien ça ?
 
Encore merci et désolé pour mes questions à la con...


Message édité par kayasax le 27-04-2004 à 15:59:18
n°709898
chaica
Posté le 27-04-2004 à 16:24:30  profilanswer
 

Normal F_OK est une constante du module os donc os.F_OK  pour l'utiliser.
 
Y'a pas de questions cons.
 
En gros pou la poo ta classe doit incarner ce que va faire ton programme.
 
ex:

Code :
  1. # le nom de ta classe
  2. class HelloWorld:
  3.    # le constructeur qui est appele quand tu instancies l objet.
  4.    # c est la premiere action realise par ton objet.
  5.    def __init__(self):
  6.       print 'hello '
  7.       self.afficherWorld()
  8.    #une methode interne. On l'appelle avec le prefixe self.
  9.    def afficherWorld(self):
  10.       print 'World!'
  11. if __name__ == '__main__' :
  12. #tu est dans le main, tu vas utiliser l objet defini plus haut.
  13. hw = HelloWorld()


Message édité par chaica le 27-04-2004 à 16:30:40
n°709925
kayasax
Posté le 27-04-2004 à 16:37:58  profilanswer
 

merci, bon c'est pas encore gagné, je crois que je vais me payer le python cookbook pour avoir plus d'exemples .

mood
Publicité
Posté le 27-04-2004 à 16:37:58  profilanswer
 

n°710241
startx25
Posté le 27-04-2004 à 20:51:06  profilanswer
 
n°710263
kayasax
Posté le 27-04-2004 à 21:23:33  profilanswer
 
n°710485
kayasax
Posté le 28-04-2004 à 10:19:27  profilanswer
 

Savez vous comment on peut avoir les caractères accentués dans les scripts python dans une console DOS ?
Merci.

n°710681
SoWhatIn22
Posté le 28-04-2004 à 11:57:03  profilanswer
 

kayasax a écrit :

dans les scripts python dans une console DOS ?


:??: c'est pas clair ta question...
je pense que ton problème vient du fait que la console windows n'affiche pas les caractères ANSI mais DOS. pour l'ascii, c'est la même chose, mais pas pour les lettres accentuées. Il faut donc lui donner directement le code DOS des caractères.

n°711875
kayasax
Posté le 29-04-2004 à 15:12:43  profilanswer
 

Excellent python cookbook, j'ai trouvé le prog pyrobocopy que je suis en train de modifier : j'ai ajouté le support de liste de destinations , maintenant je vais essayé de m'attaquer à la connexion automatisée de lecteur réseau.
Ce qui me fait m'interroger : y a t'il une fonction interne python sous windows pour crypter/decrypter un fichier ??
 
Encore merci, a+

n°711879
lorill
Posté le 29-04-2004 à 15:15:34  profilanswer
 
n°711885
kayasax
Posté le 29-04-2004 à 15:21:59  profilanswer
 

merci lorill

n°711899
kayasax
Posté le 29-04-2004 à 15:29:05  profilanswer
 

g un sousci lorsque je veux installer le module de crypto :
 
error: Python was built with version 6 of Visual Studio, and extensions need to
be built with the same version of the compiler, but it isn't installed.
 
il y a une dll à catcher ou qqchose dans le genre ?  

n°713982
kayasax
Posté le 03-05-2004 à 11:02:58  profilanswer
 

up j'ai jamais eu vs6 d'installer sur mon poste ! ??
 
edit :
ah bah même si il y a le msg d'erreur le module s'est bien installé !


Message édité par kayasax le 03-05-2004 à 11:21:22
n°714311
kayasax
Posté le 03-05-2004 à 15:07:36  profilanswer
 

j'aurais besoin d'un complément d'infos pour filecmp.dircmp() :
est il possible de récupérer que les différences avec la fonction report_full_closure() ?
=>  
self.listecomparaison=filecmp.dircmp(self.source,self.cible)
print "détails : ", self.listecomparaison.report_full_closure()
donne :
Identical files : ['CIBLE.NAF', 'DATA_001.NSF', 'MPEG-2.EXE', 'Mpeg2Decoder.ax
 'Mpeg2Parser.ax', 'axter.bat', 'tititi.txt']
Differing files : ['test.txt']
Common subdirectories : ['sr1']
diff c:\test\sr1 c:\test2\sr1
Identical files : ['eee.doc']
 
 
--> j'aimerai qu'il me récupère juste la liste des 'differing files' et j'aimerai savoir sur quoi le module se base pour trouver les différences (tailles des fichiers , date de modif ou de creation, attributs ...???)
 
enfin si quelqu'un sait quels attributs on peut récupérer avec __getattr__() : "Note that via __getattr__() hooks, all attributes are computed lazilly, so there is no speed penalty if only those attributes which are lightweight to compute are used. "
 
Merci

n°714379
kayasax
Posté le 03-05-2004 à 15:57:50  profilanswer
 

je repond à 1 de mes questions :
dircmp se base sur le module cmpcache :
# Module 'cmpcache'
#
# Efficiently compare files, boolean outcome only (equal / not equal).
#
# Tricks (used in this order):
#       - Use the statcache module to avoid statting files more than once
#       - Files with identical type, size & mtime are assumed to be clones
#       - Files with different type or size cannot be identical
#       - We keep a cache of outcomes of earlier comparisons
#       - We don't fork a process to run 'cmp' but read the files ourselves

n°720515
kayasax
Posté le 10-05-2004 à 13:00:14  profilanswer
 

:bounce: personne pour m'aider  :heink: :

est il possible de récupérer que les différences avec la fonction report_full_closure() ?  
=>  
self.listecomparaison=filecmp.dircmp(self.source,self.cible)  
print "détails : ", self.listecomparaison.report_full_closure()  
donne :  
Identical files : ['CIBLE.NAF', 'DATA_001.NSF', 'MPEG-2.EXE', 'Mpeg2Decoder.ax  
'Mpeg2Parser.ax', 'axter.bat', 'tititi.txt']  
Differing files : ['test.txt']  
Common subdirectories : ['sr1']  
diff c:\test\sr1 c:\test2\sr1  
Identical files : ['eee.doc']  
 
 
--> j'aimerai qu'il me récupère juste la liste des 'differing files'  
Merci  

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [python] wip synchroniser des répertoires (newb)

 

Sujets relatifs
PHP ou Python?Python, Pmw et Mysql
ouvrir un navigateur (mozilla) avec python[(Gros) Debutant en Python] Compiler et executer du Python
Erreur Python : TypeError: 'file' object is not callableCréer un module pour Python ( sous windows et en c ) ?
tableau et pythonplusieurs fenetres dans un script python en gtk
question d'architecture de projet python + wxPythonPython : "KeyError: u'\xe9'". [Résolu .encode("iso-8859-1")]
Plus de sujets relatifs à : [python] wip synchroniser des répertoires (newb)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR