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


Sujet :

Python

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut copie de fichiers
    Bonjour,
    En python 2.7, y a t'il un moyen pour copier un fichier, autre que os.system ("cp fic1 fic2") ou bien le lire et l'écrire.
    Merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur-Chercheur
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur-Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Je pense que le module shutil doit répondre à votre besoin (je ne l'ai pas utilisé).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import shutil
    shutil.copyfile(src, dst)
    shutil.copy(src, dst)
    Si vous ne travaillez que sous Linux, la solution que vous proposez par l'appel à os.system() est simple.
    Vous pouvez le généraliser pour d'autres plateformes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sys
    if sys.platform[0:3] == "win" :
      os.system("copy fic1 fic2")
    elif sys.platform[0:5] == "linux" :
      os.system("\\cp fic1 fic2")
    else :
      print("ERREUR : Systeme d'exploitation non implante\n--> Windows(R) ou Linux")
      sys.exit()
    À défaut, la recopie par open,read,write,close est possible. Certes un peu longue mais tout aussi correcte.

    Cordialement

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    @OliSharkPython

    Je ne comprend pas le slicing pour ce genre de chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> OS = sys.platform
    >>> OS
    'linux2'
    >>> 'linux' in OS
    True
    >>> 'windows' in OS
    False
    Attention à os.system qui renvoie rien, sauf une valeur (0)

    À la rigueur, mieux vaut utiliser subprocess

    Maintenant il est souhaité d'utiliser la lib standard, surtout quand elle est portable, il serait dommage de ne pas en profiter, shutil sera en effet un meilleur choix.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Je ne vois vraiment pas l’avantage d’utiliser cmd() ici, shutil.copy (ou shutil.copy2) est parfait pour copier des fichiers*!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur-Chercheur
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur-Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    @fred1599

    Bonsoir,

    Tout à fait d'accord pour le slicing. C'est un vieux bout de code avec des habitudes liées à d'autres langages pour la comparaison des chaînes (Fortran pour ne pas le citer). L'important n'est-il pas que cela fonctionne quand même ?

    Sinon une petite recherche dans la documentation montre que l'on trouve facilement le module shutil et ses nombreuses possibilités dont copy/copy2/copyfile que je préconise aussi d'utiliser (c'était mon premier choix d'ailleurs) pour la portabilité du code !

    Ce qui est intéressant dans cette simple question c'est le nombre de possibilités offertes simplement par Python pour y répondre en raison de sa souplesse. Mais aussi que la documentation de Python est bien fournie pour peu que l'on prenne le temps de s'y référer !

    Cordialement.

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Citation Envoyé par awalter1 Voir le message
    autre que ... ou bien le lire et l'écrire.
    shutil.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def copyfile(src, dst):
        """Copy data from src to dst"""
    ...
        with open(src, 'rb') as fsrc:
            with open(dst, 'wb') as fdst:
                copyfileobj(fsrc, fdst)
    Cela limite les réponses non ?
    Mais... Comment copier un fichier sans le lire et l'écrire awalter1 ?
    Comment faire autrement pour 'copier' un fichier ?

    @+
    Merci d'utiliser le forum pour les questions techniques.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie de fichier sur le bureau
    Par LoicH dans le forum C++Builder
    Réponses: 3
    Dernier message: 01/05/2005, 20h57
  2. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/12/2004, 22h39
  3. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows
    Réponses: 5
    Dernier message: 20/12/2004, 22h35
  4. [Kylix] Copie de fichier...
    Par paty.olivier dans le forum EDI
    Réponses: 1
    Dernier message: 23/06/2004, 12h55
  5. Copie de fichier
    Par Bjorn dans le forum C
    Réponses: 4
    Dernier message: 11/06/2002, 15h23

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