Comment rechercher fichier sans prendre en compte des caractères

SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -  
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Etant tout nouveau dans la programmation, je suis bloqué dans un programme.

Je dois rechercher un fichier pour lui appliquer un programme. Or le fichier en question aura une parti de son nom modifié à chaque fois qu'il sera modifier (qui représente la date de modification). C'est à dire que actuellement il s'appelle "ListeVoitures_130120" (avec le format AAMMJJ).
La ou je suis embèté c'est comment programmer de facon a ce que mon code s'applique sur n'importe quel fichier nommé "ListeVoiture_XXXXXX" (ou les X représentes la date).

Merci de m'aider s'il vous plait.

Voici mon petit code (pour info ce code modifie les séparateurs ";" en "tabulation") :

import os

os.rename("c:\sup\ListeVoiture.csv",
"c:\sup\ListeVoiture.txt") # on renomme le fichier CSV en TXT

Src = open("c:\sup\ListeVoiture.txt","r" ) # on ouvre le fichier texte source
Dest = open("c:\sup\out.txt","w" ) # on créé un autre fichier qui contiendra les modifications
i=Src.read() # on stocke le contenu du fichier source dans la variable i (chaine de caractères)
o=i.replace(";"," " ) # on remplace ";;;" par ";", le tout stocké dans la variable o
Dest.write(o) # on écrit o dans le fichier destination
Src.close() # et on ferme les fichiers
Dest.close()

import os

os.rename("c:\sup\out.txt",
"c:\sup\out.csv") # on renomme le fichier TXT en CSV




A voir également:

17 réponses

titodore3 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Ha, tu ne peux pas faire une boucle for qui parcoure tout les fichiers ? et a chaque tour de boucle tu applique ton code.
0
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Si sa peut être une solution mais je ne sais pas comment faire.

En gros dire :

For "tous les fichiers" in "c:\sup"
Instruction
Instruction
...
0
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Je pense qu'il y a pas mal de solutions mais je n'arrive pas a trouver une seule solution.

Voici selon moi quelques possibilités :
Appliquer le programme pour tous les fichier commencant par "ListeVoiture"
Appliquer le programme pour tout fichier .csv
Appliquer le programme pour tout les fichiers

Et biensur définir qu'on vise le répertoir "c:\sup"
0
titodore3 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
tu peux essayer en mettant une variable, qui prendrait à chaque tour de boucle une valeur suivante

par exemple tu teste ta boucle sur "ListeVoiture_010101"
puis au deuxieme tour, tu modifie la variable contenant "ListeVoiture_010101" par "ListeVoiture_010102" tu ressaye d'executer le programme et ainsi de suite jusqu'a avoir tester toutes les possibilités.

Je t'avoue que je ne suis vraiment pas expert avec la gestion des fichiers.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Tout d'abord merci de m'aider.

Oui c'est possible en effet mais j'ai l'impression qu'on se complique trop les chose en faisant comme ca.

Je vais essayer de rechercher avec ta methode tout de même.
0
titodore3 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Certes il me semble aussi que c'est fastidieux comme méthode...

Mais c'est néanmoins la première qui m'es venue à l'esprit.
Il n'y a pas des modules qui facilitent la gestion des fichiers ?
0
titodore3 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
ça pourrais t'aider ^^
source: http://python.melsophia.org/aspects/fichiers.html
4.2.3. Lister les fichiers et les dossiers
Le module os contient une fonction qui permet de lister simplement les éléments d'un dossier.

os.listdir(path)
Liste tous les dossiers et fichiers qui se trouvent dans path. Les dossiers . et .. sont automatiquement retirés.

Toutefois, pour un usage plus compliqué, on préfera le module glob, qui contient deux fonctions uniquement. Les fonctions de ce module permettent de lister tous les fichiers dont les noms correspondent au motif donné en argument. Le motif peut contenir certains caractères spéciaux :

* remplace n'importe quelle séquence de caractères.
? remplace un caractère.
[] symbolise n'importe quel caractère indiqué dans les crochets.
glob.glob(pathname)
Liste tous les dossiers et fichiers dont le motif du nom correspond à pathname.

glob.iglob(pathname)
Fonctionne de même que glob() mais retourne un itérateur. Cette fonction est donc préférable.

L'exemple qui suit est tiré de la documentation Python. Il suppose que vous ayez un dossier qui contient au moins les fichiers suivants : 1.gif, 2.txt et card.gif.

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
0
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Je vous cache pas que je suis débutant. Je connais python depuis avant hier.. lol.
Tout est nouveau pour moi. J'ai déjà programmé des petits trucs en VBA mais sa reste léger.
J'ai fais pas mal de recherches mais je ne trouve rien qui correspond a ce que je veux faire et je trouve ca vraiment bizarre.. peut être c'est moi qui comprend rien :/.
0
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Merci j'ai trouvé un truc du genre mais ce n'était pas aussi bien expliqué, j'essaie tout de suite :D.
0
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Alors c'est forcément ça mais je ne sais pas comment l'utilisé..
Je ne sais pas a quelle moment je dois indiquer mon répertoire en question c'est a dire : "c:\sup" ?
0
titodore3 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
path semble etre le répertoire actuel( répertoire ou se trouve ton programme python)... mais je peux me tromper
0
titodore3 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
PS: si t'a le temps, ça te dérangerais de jeter un coup d'oeil à ma question stp ? ^^' qui sais ... tu a peut-être la réponse. Ca parrait long comme question mais c'est tout con
https://forums.commentcamarche.net/forum/affich-27209272-utilisation-methode-d-une-classe-dans-une-autre-classe
0
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Alors Je suis désolé mais je n'arrive toujours pas a faire ce que je veux.. je ne comprend rien lol. Sa commence à m'enervé même ^^

Par exemple je veux supprimer un fichier dans un répertoire :

import glob
import os

fichier=[]

for fichier in glob.glob("c:/sup/SSS/*"):
os.remove("fichier")

Je ne comprends pas pourquoi ca marche.. ?
Je fais plein de test mais rien ne fonctionne ..

J'ai lu ta question et je ne comprends absoluement rien... :/ ^^
0
titodore3 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
import glob
import os

fichier=[]

for fichier in glob.glob("c:/sup/SSS/*"):
print(fichier)

lance le, il te donne quoi comme valeur de fichier ?
0
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Je copie le code dans un fichier txt que je renomme en fichier .py et je le lance. Sa ne me fait rien du tout..
0
titodore3 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Hein, tu copie/colle , il faut que tu indente le print pour qu'il soit dans le for(fait la touche TAB devant le print)
et ton fichier=[] ne sert a rien, ce n'est pas le même que le fichier dans le for fichier in .....
ce sont 2 variables différentes
0
SLM-BHY Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai fait ca mais sa ne me donne rien non plus.

Imaginons je veux supprimer mon fichier qui se trouve dans le répertoire c:/sup/SSS et je n'ai pas son nom juste je sais qu'il est présent labas ?
ya forcement un moyen de faire ca.. :/

dans ton lien ils disent que en mettant des "*" ou "?" on pouvais faire ce que je veux mais je n'y parviens pas..
Sa se rapproche surement de ce que je veux faire mais jai surement du mal programmer.
0