IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Regrouper dans un dossier des fichiers


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 40
    Par défaut Regrouper dans un dossier des fichiers
    Bonjour, je bloque sur un exercice ou je dois écrire un script qui regroupe dans un dossier les fichiers dont les noms commencent par un préfixe donné en paramètre :
    Le script a 3 parametre
    -le chemin/nom du dossier a partir duquel la recherche est faite
    -le prefixe
    -le chemin/nom du dossier dans lequel les fichiers vont être déplacés.

    Exemple :
    main.py DSC /IMAGES/MyPictures va regrouper dans le dossier /IMAGES/MyPictures tous les fichiers dont le nom commence par DSC contenus dans le répertoire d'accueil .

    si le fichier qui va être déplacé a le même nom qu'un fichier déjà déplacé, il faut modifier son nom pour lui ajouter un suffixe : par exemple s'il existe déjà DSC000024.png le second fichier se nommera DSC000024_2.png .
    Pour le script il ne doit utiliser aucune commande Shell hormis celle avec os.system() pour - creer le répertoire qui va recueillir les fichiers égarés ;
    - déplacer un fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/usr/bin/env python3
     
    import os,sys,re,shutil
     
    if len(sys.argv)>=3:
        repertoire = os.mkdir(sys.argv[2])
        code = sys.argv[1]
        path = "/"
     
        def parcours (path) :
     
            liste = os.listdir(path)
            for fichier in liste:
                if(os.path.isfile(fichier)):
                    resultat = re.search("code.*\.png",fichier)
                    if resultat:
                        shutil.move("/fichier","repertoire") # ici je veux déplacer le fichier du répertoire d'accueil dans celui de /IMAGES/MyPictures
                    if (os.path.exist(file)):
                        os.rename("code.*\.png","code.*_[0-9]\.png")
     
                else:
                    parcours(fichier)
        parcours(path)
    Aidez moi s'il vous plait j'ai besoin de votre aide merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Peut-être que ce petit programme t'aidera : il fait une copie de sauvegarde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import glob
    import shutil
    import os
     
    dossier_source = '/media/m----/Disque-1000/dossier-1000/Info_18-19/'
    dossier_cible = '/media/m----/Disque-1000/dossier-1000/Info_18-19/pdf_info_18-19/'
     
    copie=0
    for fich in glob.glob(dossier_source+"*.pdf"):
        fichier=fich.split('/')[6]
        dossier_cible='/'+('/'.join(dossier_cible.split('/')[1:]))
        if os.path.exists(dossier_cible+fichier):
            date_masource = os.path.getmtime(dossier_source+fichier)
            date_macible = os.path.getmtime(dossier_cible+fichier)
            if date_masource > date_macible:
                shutil.copy(dossier_source+fichier,dossier_cible)
                print (fichier,'\t', "mis à jour")
                copie+=1
            else:
                continue
        elif os.path.exists(dossier_cible+fichier) == False:
            shutil.copy(dossier_source+fichier,dossier_cible)
            print(fichier, '\t', "copié")
            copie+=1
        else:
            continue
     
    print(copie, " fichier(s) copié(s)\n")

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 40
    Par défaut
    La chose qui nous imposent c'est d'utiliser une expression régulière

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Désolé, ce n'est pas mon rayon.

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ici ça ne peut pas fonctionner: shutil.move("/fichier","repertoire").

    fichier et repertoire sont des références à des objects et ne doivent pas être entre guillemets.
    Donc comme ceci: shutil.move("/%s" % fichier, repertoire).

    Malheureusement tu fais d'abord la copie et ensuite seulement tu t'inquiètes de savoir si un fichier du même nom existe déjà.

    Sépare ce problème dans une autre fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
            ...
            resultat = re.search("code.*\.png",fichier)
            if resultat:
                dest = build_filename(fichier)
                shutil.move("/%s" % dest, repertoire)
     
     
    def build_filename(fname):
        suffix = 0
        name, ext = os.path.splitext(fname)
        while os.path.isfile(fname):
            fname = "%s_%s%s" %(name, suffix, ext)
            suffix += 1
        return fname
    Edit: En fait ta regex a le même défaut, tu dois faire resultat = re.search("%s.*\.png" %code, fichier).

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/10/2014, 17h27
  2. Réponses: 10
    Dernier message: 05/10/2014, 14h11
  3. Drag & Drop dans la liste des fichiers
    Par SaumonAgile dans le forum Dreamshield
    Réponses: 2
    Dernier message: 19/04/2008, 21h13
  4. Option Sécurité dans les propriétés des fichiers?
    Par kirout dans le forum Windows XP
    Réponses: 2
    Dernier message: 12/02/2008, 22h19
  5. Saisir le fixing dans X dossier et fichiers
    Par Le POlonais dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/11/2007, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo