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 :

Correction d'un script


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Secteur automobile
    Inscrit en
    Octobre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Secteur automobile

    Informations forums :
    Inscription : Octobre 2017
    Messages : 9
    Par défaut Correction d'un script
    Bonjour,

    J'ai besoin d'aide pour corriger un script qu'un gars sympa m'a fait sur un autre forum il y a 1 an. Je n'avais pas pu le tester avant hier soir faute de PC sous Windows.

    Voici ce que je lui avais donné comme cahier des charges :

    Un petit programme ou batch à exécuter dans un dossier qui contient des epub et pdf.

    Epub nommés sous la forme : Nom, Prénom - Titre (année)

    En exécutant le prog, il doit lire les titres des epub et pdf, vérifier qu'un dossier de chaque auteur n'existe pas déjà et créer un dossier sous la forme Nom, Prénom (nombre de fichiers du même auteur).

    Il faut qu'il lise la chaîne de caractère avant le premier " - " ou éventuellement avant le premier " & " ou " et " du nom si auteurs multiples. Attention aux noms composés avec un tiret (sans espace du coup).


    Voici un exemple :

    Fichiers présents dans le dossier :

    Pépère, Lise & Robert, Jacques - Trouvailles (2012)
    Piglia, Ricardo - Argent brûlé.epub
    Piglia, Ricardo - Pour Ida Brown.epub
    Pignat, Caroline - Les amoureux de l'Empress (2015).epub
    Pigozzi, Caroline - Le vatican indiscret.epub
    Pincon, Monique et Michel - La violence des riches.epub
    Pineau-Valencienne, Valérie - Une cicatrice dans la tête.epub

    Dossiers crées par l'éxecution du programme :

    Pépère, Lise (1)
    Piglia, Ricardo (2)
    Pignat, Caroline (1)
    Pigozzi, Caroline (1)
    Pincon, Monique (1)
    Pineau-Valencienne, Valérie (1)


    Si dossier déjà existant, il doit déplacer les fichiers concernés dans les bons dossiers et incrémenter le chiffre entre parenthèses en conséquence (nombre de livres).


    Voir son script en pièce jointe.

    Il ne fonctionne pas, je le mets dans le dossier à trier, le lance, il me demande de valider le chemin du dossier, démarre et se ferme aussitôt après la création d'un seul dossier... sans même avoir mis de fichier dedans...

    Si un pro de python peu me trouver l'erreur je suis preneur, n'y comprenant strictement rien en programmation...

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Si vous n'y comprenez rien en programmation et que vous ne souhaitez pas vous y mettre, cela va être compliqué : maintenance de l'install, maj des versions, corrections des bugs, ...
    A mon avis, aucun intérêt à utiliser un programme python.
    Pour ce qui est du programme, je ne vais jamais voir les fichiers attachés : il y a des balises de code (#) pour poster les programmes.
    Bonne fin de semaine.

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Si le dossier que vous avez tapé n'existe pas alors comme est fait le programme, et bien ca ne vous dit rien et ca ne fais rien. Donc je dirais que le dossier taper n'est pas un dossier qui existe ....

    Qui plus est quand on applique des programmes sur une arborescence de fichier, avoir des espaces dans les noms de fichiers n'est jamais une bonne idée.

    Et sinon si c'est juste pour faire de la gestion de bibliographie, il y a des utilaires qui fonctionne très bien, comme Zotero par exemple.

  4. #4
    Membre du Club
    Homme Profil pro
    Secteur automobile
    Inscrit en
    Octobre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Secteur automobile

    Informations forums :
    Inscription : Octobre 2017
    Messages : 9
    Par défaut
    Le but est tout simple, créer des dossiers "noms auteurs (nbr fichiers)" et déplacer/ranger mes epub et pdf. Je le fais à la main mais c'est très long...

    Une fois que le script fonctionnera pas besoin de le faire évoluer ni de mises à jour.

    Ce n'est pas une bibliographie (Zotero) mais juste un tri/déplacement. Mes fichiers sont dans des dossiers A, B, C, D... et je veux les ranger par auteurs...

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    import os,sys
    from shutil import copyfile
     
    filelist=[]
    pathepub=""
    pathfile=[]
    pathfileexistant=[]
     
    temp=os.path.realpath(__file__).replace("\\", "/").rsplit("/",1)
    argument1= temp[0]
     
    print ("Repertoire en cours : " + argument1)
     
    question = (input ("Est ce le bon repertoire? O ou o puis entrée pour continuer  \n"))
    if question == "O" or question == "o":
        print ("Repertoire défini : " + argument1)
    else:
        argument1=""
        argument1=(input('Tapez le chemin vers les epub ou rien pour sortir : (comme J:\\stock\\ebook )\n')).replace("\\", "/")
     
     
    if not len(argument1):
        sys.exit()
    else: print ("Repertoire utilisé : " + argument1)
     
     
     
     
    if os.path.isdir(argument1):
            pathepub=argument1.replace("\\", "/")
            fileindir = os.listdir(argument1)  
            for file in fileindir:
     
                if os.path.isfile(pathepub+"/"+file) and ( file.endswith(".epub") or file.endswith(".EPUB") or file.endswith(".pdf") or file.endswith(".PDF"))  :
                    filelist.append(file)
                    if file.find("-")>0:
                        tempsplit=file.rsplit("-",1)
                        if tempsplit[0].find("et"):
                                temp = tempsplit[0].split("et")
                                pathfile.append(pathepub + "/" + temp[0])
     
                        else:
                            if tempsplit[0].find("&") :
                                  temp = tempsplit[0].split("&")
                                  pathfile.append(pathepub + "/" + temp[0])
                            else: pathfile.append(pathepub + "/" + tempsplit[0])
     
                    else: pathfile.append(pathepub + "/" + "xxxxx_Sans_tiret_xxxxxx")
     
                if os.path.isdir(pathepub+"/"+file):
                     pathfileexistant.append(pathepub + "/" + file)              
     
     
     
     
    if not len(filelist): 
        sys.exit()
     
    ligne=0
    for epubfile in filelist:
        fait=True
        if (len (pathfileexistant)):
            for pathexistant in pathfileexistant:
                if pathexistant.find("[")>0 and fait:
     
                    temp = pathexistant.split("[")
                    if (temp[0] == pathfile[ligne]):
     
                        copyfile(pathepub + "/" + epubfile, pathexistant + "/" + epubfile)
                        ligne+=1
                        fait=False
     
        if (fait):
            os.makedirs(pathfile[ligne], exist_ok=True)
     
            copyfile(pathepub + "/" + epubfile, pathfile[ligne] + "/" + epubfile)
            print(epubfile + "  copié dans :  " + pathfile[ligne] + "/" + epubfile)
            ligne+=1
     
     
     
     
    listerep = os.listdir(pathepub)
    for rep in listerep:
        if os.path.isdir(pathepub+"/"+rep):
            listefile = os.listdir(pathepub+"/"+rep)
            nbepub = (len (listefile))
            if rep.find("[")>0:
                temp=rep.split("[")
                os.rename(pathepub+"/"+rep, pathepub+"/"+temp[0]+"["+ str(nbepub)+"]")
                print ("Répertoire recompté : " + pathepub+"/"+temp[0]+"["+ str(nbepub)+"]")
            else :
                os.rename(pathepub+"/"+rep, pathepub+"/"+rep+"["+ str(nbepub)+"]")
                print ("Répertoire crée: " + pathepub+"/"+rep+"["+ str(nbepub)+"]")
            nbepub=0
     
     
     
    print ("Nombre de fichier epub copiés  : " + str(ligne))
     
    input()

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 817
    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 817
    Billets dans le blog
    1
    Par défaut
    Bonjour

    On ne va pas te faire ton code car ce n'est pas le but du forum (et en plus quand je vois ton pâté...).
    Mais on peut t'aider à aller plus vite pour que tu fasses le tien.
    Déjà tu as des fichiers dans ton dossier de départ. Il faut donc que tu les lises et les traite un par un => for f in os.listdir("dossier_de_depart").
    Ce traitement c'est quoi ? C'est couper le nom sur le tiret (en espérant qu'il n'y en a qu'un seul). Ce qui est avant le tiret c'est l'auteur, ce qu'il y a après c'est le titre => (auteur, titre)=f.split("-") ou mieux (auteur, titre)=(x.strip() for x in f.split("-")) (cette seconde écriture supprime en plus de "auteur" et "titre" les espaces placés avant et après les caractères utiles).
    Ensuite un test pour savoir si le dossier correspondant à l'auteur existe et création s'il n'existe pas. Là il y a un petit écueil car ton dossier contient aussi entre parenthèses le nombre de documents placés à l'intérieur. Pour moi, cette info est peu utile et fait plus chier qu'autre chose mais si tu y tiens il te faut écrire alors une petite fonction permettant de dire que par exemple la chaine "Pépère, Lise & Robert, Jacques" correspond bien à la chaine "Pépère, Lise & Robert, Jacques (nnnn)" (c'est souvent pratique les petites fonctions permettant ensuite de factoriser rapidement un traitement un peu complexe et répété).
    Ensuite tu copies/déplaces le fichier dans le dossier concerné et (si tu tiens toujours à ton petit compteur) alors faut renommer le dossier.

    Quelques conseils:
    • il existe la variable os.sep qui contient le séparateur de chemin de ton OS (slash sous Unix, backslash sous Windows)
    • il existe la fonction os.path.join() qui permet de créer un chemin en rajoutant automatiquement le séparateur adéquat => os.path.join("x", "y", "z") va créer le chemin "x/y/z" (ou "x\y\z") et os.path.join(os.sep, "x", "y", "z") créera le chemin "/x/y/z"
    • le test question == "O" or question == "o" s'écrira plutôt question in "oO"
    • le test file.endswith(".epub") or file.endswith(".EPUB") or file.endswith(".pdf") or file.endswith(".PDF") pourrait s'écrire file[file.rfind("."):].lower() in (".epub", ".pdf") (un peu complexe (je récupère de "file" ce qu'il y a après le dernier ".", le converti en minuscules et ensuite regarde si ça correspond aux chaines voules) et ne fonctionne qu'à la condition qu'il y ait vraiment un "." dans la variable "file")
    • toutes tes créations complexes de chaine style pathepub+"/"+temp[0]+"["+ str(nbepub)+"]" peuvent s'écrire plus simplement "%s/%s[%s]" % (pathepub, temp[0], str(nbepub)) ou bien "{0}/{1}[{2}]".format(pathepub, temp[0], str(nbepub)).
    • essaye d'utiliser les arguments du programme comme info plutôt que les demander après. Si par exemple ton code se nomme "pgm.py" et que tu veux traiter le dossier "toto", ce sera plus pratique d'appeler "pgm.py toto" que d'appeler "pgm.py" et d'attendre que le programme te demande "quel dossier voulez-vous traiter" pour répondre "toto". Déjà c'est bien plus pratique à l'utilisation et en plus, dans ce dernier cas tu ne peux traiter qu'un truc alors qu'en utilisant le système des arguments tu peux traiter en répétitif plusieurs dossiers d'affilée (ex "pgm.py toto titi tata"). Les arguments du programme sont placés dans un tableau nommé sys.argv (avec sys.argv[0] correspondant au nom du programme lui-même et la suite des arguments "utilisateurs" étant donc placés dans sys.argv[1], sys.argv[2], ...)


    Citation Envoyé par SamSuffy Voir le message
    Si un pro de python peut me trouver l'erreur je suis preneur, n'y comprenant strictement rien en programmation...
    Ah ben c'est comme pour tout. Si tu veux le faire toi-même faut t'y mettre (l'ignorance est de courte durée, la connaissance reste à vie). Et si tu ne veux pas le faire alors faut payer une prestation (moi je n'y comprends strictement rien en plomberie et donc quand j'ai un souci de cette nature, je fais appel à un pro de la plomberie que je paye ensuite).

    pour corriger un script qu'un gars sympa m'a fait sur un autre forum il y a 1 an.
    Sympa le gars. Pas super efficace, mais sympa. T'as tenté de retourner sur cet autre forum ???
    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]

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Etre programmeur ne se résume pas à faire des copier/coller de codes d'internet.
    Ce serait bien trop simple

  7. #7
    Membre du Club
    Homme Profil pro
    Secteur automobile
    Inscrit en
    Octobre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Secteur automobile

    Informations forums :
    Inscription : Octobre 2017
    Messages : 9
    Par défaut
    Merci pour les réponses. Surtout à Sve@r même si ça ne me servira pas au final.

    Oui tu as raison hotcryx tout comme apprendre un langage... c'est pour cela que je demandais de l'aide... tout le monde n'a pas les capacités pour apprendre à coder, ni l'envie... ni même forcément le temps pour çà...

    Mon but n'est pas de me lancer dans le codage mais de voir si quelqu'un peu m'aider à faire ce que j'ai besoin de faire, sans y passer des heures et sans aller jusqu'à payer une prestation pro... car oui trier manuellement des centaines d'articles et livres en epub c'est chiant et long... si on peut automatiser simplement tant mieux ! Si non tant pis je continuerai à le faire à la main comme aujourd'hui...

    Si un programmeur avait voulu relever "le défi" pour s'amuser, s'améliorer ou rendre service simplement tant mieux... mais visiblement non et bien ce n'est pas grave...

    Désolé pour le dérangement et merci au 4 qui ont pris le temps de répondre.

  8. #8
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Repasse de temps à autre dans le coin, il peut y avoir des réponses.
    Pour ma part, vraiment pas le temps de me pencher sur ton problème même si j'ai des choses similaires mais avec d'autres arborescences.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 817
    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 817
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SamSuffy Voir le message
    car oui trier manuellement des centaines d'articles et livres en epub c'est chiant et long... si on peut automatiser simplement tant mieux ! Si non tant pis je continuerai à le faire à la main comme aujourd'hui...
    Ok, on va dire que "pour une fois"... (pardon aux modos). Je ne le fais que parce que cette demande est tellement atypique que ce n'est certainement pas un TP de cours ni un truc de taf réel (et donc aucune tricherie)

    Code python : 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #!/usr/bin/env python
    # coding: utf-8
     
    import os
    import sys
    import re
    import shutil
     
    # Fonction permettant de découper un nom style "x (nnn)" en "x" et "nnn"
    decomp=lambda nom: (
    	re.sub(r"\([0-9]{1,}\)$", r"", nom).strip(),
    	int(re.sub(r"^.{1,}\(([0-9]{1,})\)$", r"\1", nom).strip()),
    )
     
    # Fonction qui traite un dossier
    def crawler(dossier):
    	# Traitement de chaque fichier du dossier
    	for f in os.listdir(dossier):
    		# Si le fichier n'est pas un vrai fichier on le shunte
    		if not os.path.isfile(os.path.join(dossier, f)): continue
     
    		# Récupération de la position du dernier "-" et fichier shunté si pas de "-"
    		idx=f.rfind("-")
    		if idx == -1: continue
     
    		# Découpage de l'auteur et du titre
    		(auteur, titre)=(f[0:idx].strip(), f[idx+1:].strip())
     
    		# Traitement de tous les sous-dossiers déjà créés
    		for sousDossier in os.listdir(dossier):
    			# Si le sous-dossier n'est pas un vrai dossier on le shunte
    			if not os.path.isdir(os.path.join(dossier, sousDossier)): continue
     
    			# Décomposition du sous-dossier en nom+nombre
    			(subNom, subNombre)=decomp(sousDossier)
     
    			# Si le sous-nom est celui de l'auteur on a trouvé
    			if subNom == auteur: break
    		else:
    			# Aucun sous-dossier trouvé => il faudra le créer
    			# subNombre=0				# Au cas où ça serait utile plus tard
    			sousDossier="%s (%d)" % (auteur, 0)
    			os.mkdir(os.path.join(dossier, sousDossier))
    		# for
     
    		# Ok ici tout est prêt - Ne reste qu'à déplacer le fichier dans le sous-dossier (s'il n'existe pas déjà un fichier du même nom !!!)
    		print(
    			"Traitement %s => %s" % (
    				os.path.join(dossier, f),
    				sousDossier,
    			)
    		)
    		dest=os.path.join(dossier, sousDossier)
    		try:
    			shutil.move(
    				os.path.join(dossier, f),
    				dest,
    			)
    		except shutil.Error as eClass:
    			# Le fichier déplacé existait déjà !!!
    			print(
    				"Copie %s dans %s impossible [%s]" % (
    					os.path.join(dossier, f),
    					dest,
    					eClass,
    				)
    			)
    		else:
    			# On renomme le sous-dossier en fonction du nombre de fichiers qu'il contient
    			os.rename(
    				dest,
    				os.path.join(
    					dossier,
    					"%s (%d)" % (
    						auteur,
    						len(os.listdir(dest)),
    					)
    				),
    			)
    		# try
    	# for
    # crawler()
     
    # Si le programme est lancé directement
    if __name__ == "__main__":
    	for d in sys.argv[1:]:
    		crawler(d)
    # if

    Tu nommes ce fichier "toto.py" et tu le lances en lui donnant comme argument le dossier contenant tous tes fichiers à trier. Si par exemple ce dossier se nomme "c:\\truc" alors tu appelles "toto.py c\\truc". Et si tu es sous Python3, tu rajoutes un "3" à la première ligne => #!/usr/bin/env python3.

    Je suis parti de ton exemple initial c'est à dire un dossier contenant
    Pépère, Lise & Robert, Jacques - Trouvailles (2012).epub
    Piglia, Ricardo - Argent brûlé.epub
    Piglia, Ricardo - Pour Ida Brown.epub
    Pignat, Caroline - Les amoureux de l'Empress (2015).epub
    Pigozzi, Caroline - Le vatican indiscret.epub
    Pincon, Monique et Michel - La violence des riches.epub
    Pineau-Valencienne, Valérie - Une cicatrice dans la tête.epub
    Au final j'obtiens ça...
    .
    ├── Pépère, Lise & Robert, Jacques (1)
    │** └── Pépère, Lise & Robert, Jacques - Trouvailles (2012).epub
    ├── Piglia, Ricardo (2)
    │** ├── Piglia, Ricardo - Argent brûlé.epub
    │** └── Piglia, Ricardo - Pour Ida Brown.epub
    ├── Pignat, Caroline (1)
    │** └── Pignat, Caroline - Les amoureux de l'Empress (2015).epub
    ├── Pigozzi, Caroline (1)
    │** └── Pigozzi, Caroline - Le vatican indiscret.epub
    ├── Pincon, Monique et Michel (1)
    │** └── Pincon, Monique et Michel - La violence des riches.epub
    └── Pineau-Valencienne, Valérie (1)
    ** └── Pineau-Valencienne, Valérie - Une cicatrice dans la tête.epub
    ...ce qui me semble assez correct.

    Citation Envoyé par SamSuffy Voir le message
    relever "le défi" pour s'amuser, s'améliorer ou rendre service
    Mouais. C'est vrai que ça m'a "un peu" amusé...
    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]

  10. #10
    Membre du Club
    Homme Profil pro
    Secteur automobile
    Inscrit en
    Octobre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Secteur automobile

    Informations forums :
    Inscription : Octobre 2017
    Messages : 9
    Par défaut
    Super, merci d'avoir pris le temps de faire ce script. Comme tu le disais ce n'est pas pour un TP ou un exam mais pour mon usage personnel.

    J'ai testé hier soir mais impossible de le faire fonctionner. Soit y'a un souci sur mon W10 ou de version de Python, soit je suis plus c** que la moyenne !

    Fichier renommé en tri.py, en range.py ou en toto.py en test.py, idem en pyw puis mis dans mes documents, puis à la racine du C: ou encore dans le dossier "bibli" où sont mes articles en epub, et lancé en double cliquant dessus, lancé depuis la fenêtre ligne de commande de python (v3.7.0) et enfin lancé depuis le IDLE avec la touche F5.

    J'ai tenté toutes combinaisons pendant 1h sans succès. Rien ne bouge dans le dossier bibli.

    Message d'erreur sous fenêtre de commande python :

    File "<stdin>", line 1
    Test.ty c\\bibli
    ^
    SyntaxError: invalid syntax

    Si je double-clique, une fenêtre s'ouvre 1/2 sec. puis se ferme définitivement.

    Et sous IDLE avec F5 une fenêtre s'ouvre avec :

    Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>>
    =================== RESTART: E:\Soft de tri python\Test.py ===================
    >>>

    J'ai beau tout essayer comme commande, rien ne se passe

    >>> test.py
    Traceback (most recent call last):
    File "<pyshell#0>", line 1, in <module>
    test.py
    NameError: name 'test' is not defined
    >>> test.py c\\bibli
    SyntaxError: invalid syntax
    >>>
    >>>

    Une étape que j'oublie ?

    PS : j'ai bien mis un 3 après python dans ton script (testé avec et sans espace, même testé vace 3.7.0).

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 817
    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 817
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SamSuffy Voir le message
    Message d'erreur sous fenêtre de commande python :
    Je crois que le souci vient de là. Un script Python ne se lance pas depuis une fenêtre de commande Python mais depuis une fenêtre de commande MsDos (intitulée généralement "command prompt" dans les menus). Tu peux la trouver en tapant "cmd" dans la barre de recherche W10 (punaise W10 quelle misère cet OS !!!).

    Nom : VirtualBox_Windows10_04_10_2018_19_34_09.png
Affichages : 4876
Taille : 371,6 Ko

    Donc quand tu appeles "cmd" ça t'ouvre une fenêtre (la même qui s'ouvre 1/2 sec quand tu double-cliques sur le script => c'est parce que dans ce cas, il se lance sans paramètre donc il n'a rien à traiter donc il se termine et sa fenêtre se termine aussi).

    Nom : VirtualBox_Windows10_04_10_2018_19_34_25.png
Affichages : 4841
Taille : 86,7 Ko


    Mais quand tu lances "cmd", là la fenêtre ne se ferme pas et là tu peux taper des commandes "bas niveau" (comme par exemple "copy X Y" pour copier un fichier X dans un fichier Y. Là donc tu peux alors te déplacer à l'endroit où se trouve le script (cd dossier) et appeler là directement le script.
    On peut aussi lancer un script depuis l'idle Python mais ça je ne sais pas faire. De mon point de vue, l'idle Python est très bien pour tester de petits trucs rapides mais dès qu'on entre dans la vraie programmation, faut l'abandonner. Le "point and click" c'est bien pour l'utilisateur classique mais le programmeur, lui, il sors son clavier et tape ses commandes parce que c'est le seul moyen d'être plus précis.



    Donc voici mon dossier de test avant appel du script

    Nom : VirtualBox_Windows10_04_10_2018_19_56_10.png
Affichages : 4942
Taille : 196,3 Ko


    Je me déplace à l'endroit où se trouve le script (je l'ai volontairement mis ailleurs pour montrer qu'il fonctionne à distance)...

    Nom : VirtualBox_Windows10_04_10_2018_19_59_06.png
Affichages : 4882
Taille : 133,2 Ko


    Je lance le script en lui donnant le chemin où se trouve le dossier à trier...

    Nom : VirtualBox_Windows10_04_10_2018_20_01_36.png
Affichages : 4884
Taille : 154,9 Ko


    Et le résultat !!!

    Nom : VirtualBox_Windows10_04_10_2018_20_02_55.png
Affichages : 4823
Taille : 190,8 Ko
    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]

  12. #12
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Sinon une idée :
    Ce serait peut-être plus simple de mettre les noms de dossiers directement dans le script et de mettre du coup le fichier n'importe où et de le lancer avec n'importe quoi.

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 817
    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 817
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Ce serait peut-être plus simple de mettre les noms de dossiers directement dans le script et de mettre du coup le fichier n'importe où et de le lancer avec n'importe quoi.
    Une possibilité en effet. Elle n'est pas dans mes habitudes (en général, quand je fais des scripts, je les fais plutôts larges et indépendants de la machine et de son arbo et évidemment en contrepartie il faut leur passer certains détails lors de l'appel) donc ben cela n'a pas été mon choix initial (et je pensais aussi le "client" d'un niveau suffisant pour pouvoir l'utiliser)...

    Maintenant ce n'est pas vraiment compliqué à changer. Juste remplacer la fin du script par celle-ci
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Si le programme est lancé directement
    if __name__ == "__main__":
    	crawler("chemin du dossier contenant les epub")
    	input("Appuyez sur <entrée>")				# Pour que le script ne se termine pas automatiquement et laisse sa fenêtre d'exécution ouverte
    # if

    Ou alors (autre possibilité que je n'ai pas testée mais j'ai confiance): le script je l'ai écrit comme un module (la fonction "crawler()" qui fait tout le travail). Et simplement je teste en fin de script si celui-ci est appelé comme programme principal (le test if __name__ == "__main__") et dans ce cas ledit programme se charge simplement d'appeler la fonction crawler().
    Donc rien n'empêche d'utiliser juste le module "crawler()" dans Python.

    Il faut alors bien entendu copier le script dans le dossier de travail et lui donner un nom significatif car c'est ce nom qu'on donnera à Python. Pour l'exemple, on dira que le script se nomme "toto.py". Dans ce cas, il suffit d'ouvrir Python (console Python ou bien idle au choix) et de taper les commandes suivantes:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import toto
    toto.crawler("chemin_du_dossier_contenant_les_epub")

    Et tout le déroulement du crawler apparaitra dans la console Python.
    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]

  14. #14
    Membre du Club
    Homme Profil pro
    Secteur automobile
    Inscrit en
    Octobre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Secteur automobile

    Informations forums :
    Inscription : Octobre 2017
    Messages : 9
    Par défaut
    Merci j'ai réussi à le faire fonctionner, ça va bien me rendre service.

    Et du coup je vais surement chercher à l'améliorer quand j'aurai du temps devant moi et du coup mettre le nez dans la programmation/Python.

    - Incrémentation quantité epub en comptant le nombre de fichiers dans le dossier et pas lors du déplacement car doublons...
    - Lors de la lecture du nom de l'auteur prise en compte que du premier seulement pour créer le dossier correspondant (avant le premier " et " ou " & " rencontré)...

    Et idée nouvelle... export automatique dans un excel de la liste des epubs (un onglet par lettre...).

    Et soyons fous... création d'un script capable de lire les métadonnées du fichier pour renommer celui-ci sous la forme :
    Nom, Prénom - Titre (année) car les livres du domaine public sont tous nommés de manière différente selon les sites, et pareil sur les epubs achetés sur les différents site de vente... et moi je suis maniaque, j'aime que tous soient nommées sur le pmême principe...

    Merci encore pour ton script

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 817
    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 817
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SamSuffy Voir le message
    Citation Envoyé par SamSuffy Voir le message
    Une fois que le script fonctionnera pas besoin de le faire évoluer ni de mises à jour.
    Et du coup je vais surement chercher à l'améliorer quand j'aurai du temps devant moi et du coup mettre le nez dans la programmation/Python.

    - Incrémentation quantité epub en comptant le nombre de fichiers dans le dossier et pas lors du déplacement car doublons...
    - Lors de la lecture du nom de l'auteur prise en compte que du premier seulement pour créer le dossier correspondant (avant le premier " et " ou " & " rencontré)...

    Et idée nouvelle... export automatique dans un excel de la liste des epubs (un onglet par lettre...).

    Et soyons fous... création d'un script capable de lire les métadonnées du fichier pour renommer celui-ci sous la forme :
    Nom, Prénom - Titre (année) car les livres du domaine public sont tous nommés de manière différente selon les sites, et pareil sur les epubs achetés sur les différents site de vente... et moi je suis maniaque, j'aime que tous soient nommées sur le pmême principe...
    Et voilà. Ca se passe toujours ainsi. On croit que le besoin initial est totalement complet et dès qu'il a été satisfait, on se rend compte qu'en fait il ne l'était pas.
    Enfin si ça peut t'inciter à te mettre à la prog Python pas de souci. Ne reste qu'à télécharger un tuto (le plus plebiscité généralement est le "swinnen" => taper "swinnen tutoriel python" dans gogol) et s'y mettre. Parce que là, tu trouveras personne pour le faire à ta place.

    Citation Envoyé par SamSuffy Voir le message
    - Incrémentation quantité epub en comptant le nombre de fichiers dans le dossier et pas lors du déplacement car doublons...
    Ca c'est déjà fait. Dans cette partie
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # On renomme le sous-dossier en fonction du nombre de fichiers qu'il contient
    os.rename(
    	dest,
    	os.path.join(
    		dossier,
    		"%s (%d)" % (
    			auteur,
    			len(os.listdir(dest)),
    		)
    	),
    )
    Le dossier qui reçoit le fichier est renommé en fonction du nombre total de fichiers qu'il contient (et non pas, comme j'avais écrit dans une version précédente, en fonction de son chiffre+1). Donc si le dossier "Pépère, Lise & Robert, Jacques (1)" sensé contenir un fichier en contient en fait 48 (cause copie en provenance d'ailleurs sans que le nom du dossier ait été mis à jour), le script, s'il y copie un nouveau epub, le renommera alors en "Pépère, Lise & Robert, Jacques (49)".
    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]

  16. #16
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Si c'est pour ton compte personnel, je ne vois pas ce qui t'empêche d'utiliser des solutions existantes pour résoudre ces problèmes. Surtout si en plus tu ne connais pas bien python et que tu n'as pas le temps de développer ton propre outil.


    Toi ton problème c'est de la gestion de pdf et epub, de diverses articles et bouquins. Il y a des logiciels pour ça. Capable de classer en dossiers et/ou collections, de commenter avec des notes perso, de renommer selon les métadata des fichiers, de rechercher un fichier dans sa base selon une métadata, de créer une bibliographie à partir de documents (lorsqu'on souhaite par exemple ajouter des références dans un document, au lieu de se taper je ne sais combien de clic et de saisie clavier par référence pour constituer cette bibliographie) et j'en passe.

    Je vous avais proposé Zotero qui fait tout ca. Il y en a d'autre également si Zotero ne vous plait pas. C'est pas vraiment dans le contexte python, mais je pense que vous devriez allez jetter un oeil sur ce type de logiciel car ca répond parfaitement à votre besoin. Ce ne sont pas des gros logiciels (mon install de Zotero fait 108 Mo), et c'est gratuit.

Discussions similaires

  1. ReCaptcha: Tout correctement installé mais script non-exécuté (pas de message d'erreur)
    Par vhenin dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 22/02/2012, 21h46
  2. demande d'aide pour correction d'un script
    Par maikess dans le forum VBScript
    Réponses: 3
    Dernier message: 03/09/2010, 14h34
  3. Optimisation et correction d'un script
    Par xess91 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/08/2010, 15h01
  4. correction de script
    Par donmamio dans le forum Langage
    Réponses: 1
    Dernier message: 03/05/2006, 12h25

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