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 :

Copie de fichiers dans divers dossiers.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Billets dans le blog
    1
    Par défaut Copie de fichiers dans divers dossiers.
    Bonjour.
    Je suis complètement dépassé Je pratique peu Python et bien souvent je bute sur des éléments "de base".

    Mon problème sous Debian 11 - Python 3.9.16 64-bit | Qt 5.15.6 | PyQt5 5.15.7 | Linux 5.10.0-23-amd64 - Spyder :

    Dans un dossier "DossierPrincipal", il y a plusieurs fichiers (fichier1.odt, .... fichier5.odt) que je voudrais copier dans des sous-dossiers.
    Je crée les sous-dossiers en question dans mon dossier courant (sousDossier1, ... sousDossier4).

    Jusque là, pas de problème. Ça fonctionne.

    Maintenant, je veux copier un premier fichier1.odt dans mon premier sous-dossier.
    Et là, l'adresse du "DossierPrincipal" est très longue.
    J'essaie d'enregistrer cette adresse dans une variable, et ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dossierPrincipal = (os.getcwd())
    Maintenant, au départ de ce dossier, je voudrais copier le fichier1.odt dans le sousDossier1, le fichier2.odt dans le sousDossier2, ...

    Je n'arrive pas à indiquer l'adresse de destination de la copie sans quitter le dossierPrincipal avec la commande
    Merci de m'aider à m'y retrouver.
    A+

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    salut,

    je vais prêcher pour ma paroisse : pourquoi ne pas faire ça en shell, puisque de toute façon tu demandes à Python de le faire en sh (si je comprends bien) ?
    ce serait tellmeent plus direct, et plus simple, ne serait-ce qu'à debugguer.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    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,

    Il faut donner les deux chemins en argument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    shutil.copy(origin, destination)
    Il s'agit bien de créer une copie ? Si c'est pour déplacer le fichier in faut utiliser shutil.move(origin, destination).

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Papy Octet Voir le message
    Dans un dossier "DossierPrincipal", il y a plusieurs fichiers (fichier1.odt, .... fichier5.odt) que je voudrais copier dans des sous-dossiers.
    C'est vrai que la remarque de N_BaH est assez logique. Tu es sous Debian, tu as accès au shell, pas super compliqué de taper cp fichier1.odt sousDossier1 et la suite. Python est un chouette langage mais il n'a pas été spécifiquement optimisé pour te permettre de lui indiquer simplement comment faire des trucs qu'on fait déjà classiquement en shell.
    Accessoirement il y a un détail que tu n'as pas cité: est-ce un besoin ponctuel ou bien répétitif? Parce qu'une fois que les fichiers sont copiés il ne devrait pas avoir nécessairement besoin de les recopier tous les 4 matin. Ou alors il s'agit d'une sauvegarde et là on entre dans une autre problématique.
    Accessoirement pour copier "facilement" les fichiers 1, 2, 3, etc dans des dossiers 1, 2, 3, etc en shell c'est aussi assez faisable...
    for i in $(seq 10); do cp "fichier$i.odt" "dossier$i" && echo "fichier$i copié"; done...

    Citation Envoyé par Papy Octet Voir le message
    J'essaie d'enregistrer cette adresse dans une variable, et ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dossierPrincipal = (os.getcwd())
    Attention, tu n'enregistres pas l'adresse du dossier principal mais l'adresse de l'endroit où tu te trouves. C'est peut-être, dans ton cas, la même chose mais cela peut ne pas l'être tout le temps. Il ne faut pas confondre.
    De plus les parenthèses sont inutiles => dossierPrincipal = os.getcwd() (les parenthèses aussi ont un rôle dans Python donc on ne les met pas "au hasard") mais surtout... à quoi sert la variable en réalité puisque tu as déjà l'info dans os.getcwd() ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour

    oui, puisque tu utilises PyQt, donc une interface graphique, il est plus que probable que os.getcwd() ne soit pas la bonne valeur pour ton dossier "principal"

    Je n'arrive pas à indiquer l'adresse de destination de la copie sans quitter le dossierPrincipal avec la commande
    shutil.copy(f"{dossierPrincipal}/{fichier}.odt", f"{dossierPrincipal}/{sousdossier}/") cette fonction ne change justement pas le répertoire courant donc ta question n'a pas trop de sens
    Ou, alors tu essayes de passer des chemins relatifs ?


    --------
    Note: si c'est que pour linux, et si ce n'est pas un déplacement (ou alors pourquoi copier...), je penserais en premier à un lien symbolique.

    Citation Envoyé par N_BaH Voir le message
    pourquoi ne pas faire ça en shell
    En shell (python subprocess), il n'est pas possible de contrôler les erreurs alors qu'en python, j'ai des exceptions que je peux gérer et accessoirement, dans la boucle, je peux faire d'autres opérations sur ces fichiers (avant ou après copie).
    Si c'est en natif dans python (pas une bibliothèque à installer), c'est normalement une mauvaise idée d'utiliser le shell

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    s'il avait été dit explicitement qu'il s'agit d'un projet plus large, je n'aurais rien dit.
    là, j'en suis à « je veux copier des fichiers en python », c'est une tâche triviale, alors un simple interpréteur de commandes me semble être l'outil approprié : une boucle, quelques tests pour faire bien, et hop !

    pourquoi le shell n'est-il pas python !?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Note: si c'est que pour linux, et si ce n'est pas un déplacement (ou alors pourquoi copier...), je penserais en premier à un lien symbolique.
    Ou un lien réel (on semble se trouver dans le même FS et le lien réel a l'avantage de ne pas dépendre de son original).
    En fait j'y avais pensé aussi puis je me suis dit "peut-être il y a une histoire de sauvegarde" et donc dans ce cas le lien ne tient plus (mais dans ce cas je préconiserais alors le tar+xz)
    Le PO nous dira mieux ce qu'il veut faire...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/06/2021, 17h23
  2. Réponses: 2
    Dernier message: 24/02/2021, 16h15
  3. Copie de fichiers dans le dossier de la BDD
    Par alaind17 dans le forum HyperFileSQL
    Réponses: 4
    Dernier message: 11/07/2012, 22h48
  4. copie de fichiers dans différents dossiers
    Par mig87 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 02/09/2011, 08h56

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