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 :

Problème de copie de fichier


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 11
    Points
    11
    Par défaut Problème de copie de fichier
    Bonjour à tous,

    Je viens de m'inscrire sur le site et je suis débutant dans python.
    Donc soyez indulgent

    Je vais vous expliquer le programme que j'ai envie de coder.
    Le but de mon code est de copier des fichiers dans un répertoire préalablement crée. J'ai un répertoire qui contient pleins de fichiers de films en .mkv.
    Je veux prendre le nom du fichier (sans l'extension) et créer un répertoire avec ce même nom de fichier pour ensuite copier le fichier dans celui-ci.

    Voici mon code :

    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
    #!/usr/bin/env python
    # -*- coding: utf8 -*-
     
    import tkinter
    import tkinter.filedialog
    import sys, os, re, unittest, string, shutil
     
    rep=os.getcwd()
    fen = tkinter.Tk()
    dirSource = tkinter.filedialog.askdirectory(parent=fen,title=r'Sélectionner un répertoire', initialdir=rep)
    fen.destroy()
    fen.mainloop()
     
    for liste in os.listdir(dirSource):
        testFile = os.path.isfile(liste)
        fileName = os.path.splitext(liste)[0]
        os.chdir(dirSource)
        if  testFile == True :
            createRep = os.mkdir(fileName)
            copyFile = shutil.move(fileName, createRep)
            #print(fileName)
            #print(createRep)
    Le problème c'est que la je bloque je sais pas comment copier les fichiers dans le bon répertoire. shutil.move ne fonctionne pas.
    En plus il oublie toujours de créer un répertoire (sur 5 noms de fichiers par exemple il crée que 4 répertoires, il en oublie toujours un).

    Pouvez-vous m'aider à résoudre mon problème? Ou me donner des pistes car j'ai rien trouver de concluant sur Google.

    Merci beaucoup.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Je n'aurais sans doute pas codé cela ainsi mais votre code devrait fonctionner.
    Quelles sont les erreurs remontées?
    Est ce qu'il y a une relation entre "erreurs" et "nom particulier" des fichiers?
    Est ce que les erreurs concernent toujours les mêmes fichiers?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup de me répondre.

    Tout fonctionne la création des reps se fait sauf le premier fichier mais c'est après pour la copie que je sèche.

    Le message d'erreur est celui la :
    builtins.TypeError: Can't convert 'NoneType' object to str implicitly
    En fait c'est surtout que j'ai du mal à voir comment je pourrais coder la suite. Comment coder pour que le programme prenne les fichiers et qu'il les copie dans les répertoires respectifs.

    Pour le 2eme problème c'est souvent avec le premier fichier de la liste qu'il ne crée pas de répertoire.

    Pour info comment vous coderiez ça?

    Merci.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    donc les erreurs sont dans l'utilisation des retours d'appels de fonctions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            createRep = os.mkdir(fileName)
            copyFile = shutil.move(fileName, createRep)
    Est ce que os.mkdir est supposé retourner le nom du répertoire crée?
    De même pour shutil.move: çà retourne quoi?

    exemple de code "pepère":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def movefiles(src, ext, dst):
        for fname in os.listdir(src):
            srcpath = os.path.join(src, fname)
            if os.path.isdir(srcpath):
                continue
            if not fname.endswith(ext):
                continue
            dstdir = os.path.join(dst, os.path.splitext(fname)[0])
            if not os.path.exists(dstdir):
                os.mkdir(dstdir)
            shutil.move(srcpath, dstdir)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 11
    Points
    11
    Par défaut
    Salut,

    En fait createRep retourne None. Moi je voulais le nom du répertoire.
    Et copyFile retourne l'erreur suivante :
    builtins.TypeError: Can't convert 'NoneType' object to str implicitly
    Donc c'est sur que la commande shutil.move ne peut pas fonctionner.

    Je dois me pencher sur ton code pour le comprendre.
    Je suppose que ton code va s'occuper de la partie copie de mon programme.
    Je suppose aussi que ext correspond à l'extension du fichier.
    Est-ce que je peux mettre * pour dire que je veux toutes les extensions?

    Merci de ton aide c'est super apprécié. Je commençais à me sentir seul dans mon code et la miracle y a des gens qui peuvent m'aider.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par tbr67fr Voir le message
    Je suppose aussi que ext correspond à l'extension du fichier.
    Est-ce que je peux mettre * pour dire que je veux toutes les extensions
    Dans cette mouture, il faut écrire explicitement la "fin" qu'on souhaite '.mkv' par exemple. Plus flexible demande de passer par des regexp ou la fonction fnmatch

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Je me suis beaucoup inspiré de ton code et la ça fonctionne.

    Voici le code :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/env python
    # -*- coding: utf8 -*-
     
    from tkinter import *
    import tkinter.filedialog
    import tkinter.messagebox
    import sys, os, shutil
     
    def movefiles(src, ext, dst):               # Definition de la fonction
        for fname in os.listdir(src):
            srcpath = os.path.join(src, fname)
            if os.path.isdir(srcpath):
                continue
            if not fname.endswith(ext):
                continue
            dstdir = os.path.join(dst, os.path.splitext(fname)[0])
            if not os.path.exists(dstdir):
                os.mkdir(dstdir)
            shutil.move(srcpath, dstdir)
     
    rep=os.chdir('/')                # On se place a la racine du disque
    fen = tkinter.Tk()               # Appel de la fenetre de selection du repertoire
    dirSource = tkinter.filedialog.askdirectory(parent=fen,title=r'Sélectionner un répertoire', initialdir=rep)
    fen.destroy()
    fen.mainloop()
     
    src = dirSource                  # Repertoire source : pointe sur la selection par fenetre
    ext = ''                         # Extension : toutes les extensions
    dst = dirSource                  # Repertoire destination : le meme que la source
    movefiles(src, ext, dst)         # Fonction creation de repertoire + copie de fichier
     
    msgok=Tk()                       # MessageBox de fin du programme
    msgok.geometry("1x1+0+0")        # Creer un pixel en haut a droite : pour enlever la fenetre inutile
    msgok.overrideredirect(TRUE)     # Enleve les menus etc..
    tkinter.messagebox.showinfo('MoveFile',r'Programme Terminé')  # Cree le messageBox
    msgok.destroy()
    Il me reste à l'améliorer mais c'est déjà un bon début.
    J'ai appris des choses avec ton code mais comment tu fais pour coder comme ça


    Merci beaucoup.

Discussions similaires

  1. Problème de copie de fichier sur serveur
    Par Vincinho dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/04/2009, 14h51
  2. Problème de copie de fichier par FTP
    Par tpdm dans le forum AS/400
    Réponses: 3
    Dernier message: 31/07/2008, 15h37
  3. C# problème de copie de fichiers.
    Par Shypster dans le forum C#
    Réponses: 9
    Dernier message: 25/01/2008, 16h46
  4. [Système] problème de copie de fichier entre 2 serveurs
    Par HOUDEBINE dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2006, 16h13
  5. problème de copie de fichier...
    Par Pe04 dans le forum Langage
    Réponses: 5
    Dernier message: 22/03/2006, 10h17

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