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 :

Traitement sur des fichiers/répertoires windows


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Traitement sur des fichiers/répertoires windows
    Bonjour,

    Je n'ai quasiment jamais vu une ligne de python de ma vie, mais il semble d'après l'aide de certains internautes sur ce forum, que ce soit le langage le plus adapté à mon besoin actuel. J'espère que vous pourrez m'apporter un peu d'aide. Merci d'avance pour la lecture de ce long et fastidieux post

    Voici d'un point de vue fonctionnel (et un peu algo) ce que je cherche à faire:

    Dans le cadre de mon travail, je reçoit tous les jours dans un répertoire O:\Racine\Rep1, un certain nombre de fichiers dont le nom suit une logique précise :
    TR_refXX_date.txt
    TR_refXX_date.csv


    date est la date du jour, XX est un nombre compris entre 01 et 99 (il n'y a pas forcément tous les nombres compris dans cet intervalle).

    Je voudrais faire deux opérations:
    Copier tous les fichiers .csv vers un autre répertoire d'un autre disque (K:\Racine\Rep2).
    Une fois que ceci est réalisé, je veux couper tous les fichiers (.csv et .txt) vers un autre répertoire, pour archivage. Mais c'est là que le nombre XX est important. Le duo .csv + .txt contenant XX, doit aller dans (O:\Racine\Archiv\XX).

    J'imagine que ça doit se passe un peut comme ça :

    Opération 1

    while (tous les fichiers n'ont pas été scannés)
    current file
    copy file (filename = "*.csv",K:\Racine\Rep2)
    goto next file

    Opération 2

    while (tous les fichiers n'ont pas été scannés)
    current file
    chaine XX = "septième et huitième caractère de mon fichier"

    if (O:\Racine\Archiv\XX existe):
    cut/paste (file, O:\Racine\Rep1, O:\Racine\Archiv\XX)
    else:
    create O:\Racine\Archiv\XX
    cut/paste (file, O:\Racine\Rep1, O:\Racine\Archiv\XX)
    goto next file

    Je m'excuse d'avance pour la lisibilité de tout ça. J'espère que c'est à peu près clair.

    Merci de votre aide!

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Salut,

    Effectivement, comme toi, je passerais par un script python pour résoudre
    ce type de problème. D'une part parce qu'on l'apprend vite, d'autre part parce qu'il a, en standard, tous les modules qu'il faut pour cela.

    Voici un exemple fonctionnel minimum qui correspond à ce que tu veux faire.

    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:UTF-8
     
    u"""
     
        Les trois modules python à utiiser
        sot ici os,shutil, et re
     
     
    """
     
    import os           # Services os génériques
    import shutil       # Opérations de haut niveau sur les fichiers
    import re           # Expression  régulière
     
    def main():
        # Noter l'utilisatiion du signe / comme sous unix
        # cela evite de devoir faire
        # Opération 1 :copie des fichiers csv
     
        for nom_fichier in os.listdir('d:/source'):
            if re.match(r'^tr_ref.*\.csv$',nom_fichier):
                shutil.copy2('d:/source/'+nom_fichier,'e:/destination')
     
        # Opération 2 : archivage
        for nom_fichier in os.listdir('d:/source'):
            if re.match(r'^tr_ref.*\.csv$',nom_fichier) or re.match(r'^tr_ref.*\.txt$',nom_fichier):
                sous_rep_archive = "e:/archives/"+nom_fichier[6:8]
                if not os.path.exists(sous_rep_archive):
                    os.mkdir(sous_rep_archive)
                shutil.move('d:/source/'+nom_fichier,sous_rep_archive+'/'+nom_fichier)
     
     
    if __name__ == '__main__':
        main()
    Note qu'il s'agit vraiment d'un exemple minimum et même minimaliste.
    Par exemple, je n'ai mis aucune gestion des erreurs (try except) indispensables quand on veut mettre ce genre de script en production.

    Avant de te lancer, je crois qu'il serait bon que tu suive un bon petit tutoriel (il y en a plein sur le Net).

    En espérant t'avoir été utile

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup pour tout ça! Ça me rend un grand service!
    Je vais marquer le sujet comme résolu, car maintenant c'est à moi de bosser un peu dessus

    Bonne continuation

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

Discussions similaires

  1. [WD20] Problème de droit windows sur des fichiers
    Par lololebricoleur dans le forum WinDev
    Réponses: 11
    Dernier message: 04/02/2015, 00h34
  2. Réponses: 1
    Dernier message: 07/10/2008, 06h18
  3. Réponses: 8
    Dernier message: 14/09/2006, 16h43
  4. Réponses: 5
    Dernier message: 05/06/2004, 13h12
  5. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53

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