Créer 300 dossiers en Python
Par Narann le samedi, 21 février 2009, 15:25 - Script et code - Lien permanent
Il arrive dès fois d'avoir à créer un tas de dossier identique ou la seul différence se situe au niveau du numéro...
J'ai toujours considéré qu'a partir du moment ou une manipulation devait être faites plus de deux fois il fallait qu'elle soit automatisé. (Car on se rend compte qu'au final on le fait bien plus de trois fois :D )
Je vous propose modestement ce petit script Python oû j'ai expliqué, ligne à ligne, la démarche de la manière la plus claire possible. Le but n'est pas de l'utiliser tel quel mais de vous en inspirer. L'objectif étant qu'un non initié puisse faire quelques modifications pour pouvoir l'adapter à ses besoins.
[python] import os for i in range(300): planNum = str(i) if len(planNum) == 1: planNum = "00"+planNum if len(planNum) == 2: planNum = "0"+planNum folderName = "P"+planNum os.makedirs(folderName)
/EDIT 2009 08 10
Comme l'a dit Laurent dans un autre billet, il existe une fonction Python qui bourre les zéros automatiquement:
[python] print str(50).zfill(4) >> "0050"
Le code serait donc:
[python] import os for i in range(300): planNum = str(i).zfill(3) folderName = "P"+planNum os.makedirs(folderName)
/FIN EDIT
Explication:
[python] import os
On importe le module "os" qui permet de d'utiliser des fonctions propre à l'OS (Dans notre cas, pour demander a Windows de créer un répertoire.)
[python] for i in range(300):
i est une variable et range(300) est une liste de type: 0, 1, 2, 3, ... 299. Donc, "pour" i = chaque élément de la liste:
[python] planNum = str(i)
planNum sera égale la variable i mais de type string. En effet, i est de type int (ou float) mais pour nommer un dossier, il nous faut une chaine de caractère qui est donc un type string. La commande str(maValeur) renvoir maValeur en type string. Exemple: str(12) = "12"
[python] if len(planNum) == 1:
Ceci est pour le padding (ou bourrage de zéro): len(maVariableString) renvoi le nombre de caractère dans le mot maVariableString. Si la longueur de la liste de caractère de ma variable planNum est strictement égal à 1:
[python] planNum = "00"+planNum
On ajoute deux zéros devant la valeur. Ainsi, si planNum = "1" -> planNum = "00"+planNum -> "001"
[python] if len(planNum) == 2: planNum = "0"+planNum
Idem mais si planNum contient deux caractère, on ajoute un seul zéro (par exemple: "12" -> "0"+"12" -> "012")
[python] folderName = "P"+planNum
On créé une variable qui contiendra le nom du folder: folderName -> "P"+planNum -> "P"+"001" ->"P001", "P002", "P003", ... "P299"
[python] os.makedirs(folderName)
Utilise la fonction "makedirs" du module "os" importé plus haut pour créer le répertoire "folderName".
Sauvegardez le tout dans un fichier texte portant l'extension Python (.py) et lancez le.
Bon, c'est pas du gros script mais c'est concis et ça offre des possibilités intéressantes. :)
Commentaires
Je ne sais pas si tu gagnes en terme de performances, mais il est possible d'éviter l'utilisation des if:
import os
for i in range(300):
planNum = str(i)
folderName = "P%03d" % planNum
os.makedirs(folderName)
Comme laurent_3d l'a fait remarqué ici:
http://www.fevrierdorian.com/blog/i...
Le plus simple est d'utiliser la fonction zfill(nb_de_zero) et hop, le bourrage est automatique! :D