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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Création d'une boucle de conversion de fichiers .docx en .txt seulement si le fichier .txt n'existe pas déjà.
    Bonjour à tous,

    Débutant, je souhaiterais convertir un grand nombre de fichiers .docx en fichiers .txt grâce à un script. Cependant une grande partie des fichiers .docx du répertoire a déjà une copie en .txt. Aussi souhaiterais-je que ma boucle de conversion ne s'exécute qu'à la condition qu'un fichier .txt du même nom que le fichier .docx n'existe pas déjà.

    Voilà le script que j'espérais faire fonctionner :

    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
    #coding: *-* utf8
     
    import os
    import docx2txt
     
    path = "/home/guisocius/repertoiredoc/"
     
    files = []
    for file in os.listdir(path):
        if file.endswith('.docx'):
            if not os.path.exists(file.replace('.docx', '.txt')):
                files.append(file)
     
    for i in range(len(files)):
         text = docx2txt.process(files[i])
    Lorsque je l'exécute, l'interpréteur me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileNotFoundError: [Errno 2] No such file or directory: 'A20A17000459_31647584700018_8610Z.docx'
    A20A17000459_31647584700018_8610Z.docx est justement un fichier docx qui n'a pas de copie du même nom en .txt et dont je souhaiterais précisément qu'elle soit crée par mon script. A noter que bien que l'erreur indique qu'il ne trouve pas ce fichier, c'est pourtant l'interpréteur qui le trouve tout seul.

    J'ai bien sûr vérifié que le chemin indiqué était le bon.

    Vous remerciant par avance de vos conseils

  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,

    Citation Envoyé par Guisocius Voir le message
    Vous remerciant par avance de vos conseils
    Déjà si vous postez un message d'erreur, postez le message complet donnant l'instruction qui a généré l'erreur.

    Pour le reste, rien n'empêche le fichier d'avoir disparu entre le moment du os.listdir et l'open qui y accède, ou pire, le fichier répertoire peut être corrompu: il contient encore une entrée qui ne correspond plus à rien.

    Dans tous les cas, vous devez passer par une gestion d'exception (try...except...) pour que le programme survive aux différents cas "acceptables" dans les changements extérieurs.

    Possible aussi que ce soit "autre chose" i.e. un bug... et dans ce cas, il faut chercher sur Internet si quelqu'un n'est pas tombé dedans voire le remonter aux développeurs pour qu'ils comprennent la cause et corrigent le code.

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

  3. #3
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    os.listdir() ne donne que les noms des fichiers, pas leur chemin.

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for f in files:
        text = docx2txt.process(os.path.join(path, f))

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de vos réponses respectives.

    Effectivement "docx2txt.process(os.path.join(path, f)" met fin à l'erreur.

    Ceci étant dit avec le script ainsi amendé je n'arrive toujours pas à obtenir le résultat attendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    path = "/home/guisocius/repertoiredoc/"
     
    files = []
    for file in os.listdir(path):
        if file.endswith('.docx'):
            if not os.path.exists(file.replace('.docx', '.txt')):
                files.append(file)
     
    for f in files:
        text = docx2txt.process(os.path.join(path, f))
    Quand je fais tourner le script ainsi rédigé, il ne fait que créer quatre objets.
    - "files" type "list" qui contient bien le nom de fichiers qui je souhaite convertir,
    - "file" et "f" de type str, qui contiennent chacun le même nom de fichier.
    - "text" de type "str" qui contient seulement le contenu - effectivement converti au format .txt - d'un seul mes fichiers, en lieu et place d'un objet de type "list" qui en contiendrait plusieurs.

    En outre je souhaiterais que les fichiers .txt ainsi convertis soient créés dans mon dossier repertoiredoc, Je pensais que l'usage de docx2txt suffirait (c'est le cas sur R avec le package du même nom) mais vraisemblablement pas ici. J'ai pensé à compléter avec open c'est sans succès.

    Auriez-vous une idée ?

    Vous remerciant une nouvelle fois par avance.

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

    Citation Envoyé par Guisocius Voir le message
    Auriez-vous une idée ?
    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for f in files:
        text = docx2txt.process(os.path.join(path, f))
    A chaque itération, le texte retourné par docx2txt.process ira écrasé le précédent.
    Si vous voulez faire une liste de chacun des textes et les écrire "ailleurs", ben, il faut écrire le code qui va bien.

    note: testez votre code sur un répertoire ne contenant que quelques fichiers pour vérifier que çà récupère bien ce que vous voulez...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/10/2017, 13h39
  2. création d'une boucle for pour interrogation requête sql
    Par philder62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/12/2007, 15h14
  3. création d'une table à partir d'un fichier texte
    Par romain.barraud dans le forum Installation
    Réponses: 5
    Dernier message: 05/04/2007, 18h40
  4. création d'une liste d'après un fichier en c
    Par ghislain118 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/12/2005, 10h56

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