Bonsoir, j'ai à nouveau besoin mais c'est fois ci pour la fonction glob glob que je ne n'écrive pas du tout et aussi pour les condition if sur les chaîne de caractères sur plusieurs lignes et pour dire vrai la fonction glob glob j'ai tout compris je crois juste que l'on peut mettre des noms de fichiers avec caractères spéciaux. Exemple glob.glob('*t3.*') c'est pour tout les fichiers qui commence par n'importe et dans le nom fini par t3 et n'importe quel extentions c'est ça? Et pour la condition if avec chaîne caractères sur plusieurs lignes c'est avec des expressions régulières et \n pour les retours à la lignes. si dessous le code détailler
ce que je veut faire c'est lire la quasi totaliter de z:/source (dossiers, sous dossiers de dossiers, sous dossiers de sous dossiers de dossiers etc avec fichiers) pour celà pas de problème pour l'instant le code que j'ai trouver sur internet marche, mais que quand il trouve un fichier avec ce nom '*t3.*' il le traite c'est à dire l'ouvre il vérifie si le fichier contient la chaîne de caractères sur plusieurs lignes suivante
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 # -*- coding: cp1252 -*- import re import glob import os #Multiplieurs multiplieurCapacity = raw_input('entrée un nombre pour multiplier la Capacitée par ') multiplieurCapacityint = int(multiplieurCapacity) #fichier à traiter Dir = 'z:/source' while 1: if not os.path.isdir(Dir): print "That is not a valid folder name" Dir = raw_input("Enter your path to the parent directory: ") else: for root, dirs, files in os.walk(Dir): for name in files: filename = os.path.join(root, name) dirname = os.path.dirname(filename) dirname2 = 'z:/destination X' + multiplieurCapacity + '/' + dirname[10:] basename = os.path.basename(filename) split = os.path.split(filename) splitdrive = os.path.splitdrive(filename) splitext = os.path.splitext(filename) fichierchemin = 'z:/destination X' + multiplieurCapacity + '/' + filename[10:] print filename print dirname print basename print split print splitdrive print splitext t3 = glob.glob('*t3.*') for filename in t3: fichieropen = open(filename) fichierread = fichieropen.read() #Lit tout le fichier d'un coup if '\t*<Production.>\n\t*<ResourceName>ROFF_0</ResourceName>\n\t*<ResourceNumber>\d*</ResourceNumber>' in fichierread: def Capacitymulti(Capacity): return Capacity.group(1) + Capacity.group(2) + Capacity.group(3) + Capacity.group(4) + Capacity.group(5) + Capacity.group(6) + Capacity.group(7) + Capacity.group(8) + str(int(Capacity.group(9)) * multiplieurCapacityint) + Capacity.group(10) Capacityregex='(\t*)(<Production.>)(\n)(\t*)(<ResourceName>ROFF_0</ResourceName>)(\n)(\t*)(<ResourceNumber>)(\d*)(</ResourceNumber>)' Capacityreplace=re.sub(Capacityregex, Capacitymulti, fichierread) print Capacityreplace if os.path.exists(dirname2): print 'exist déjà ' + dirname2 else: os.makedirs(dirname2) fichier2open=open(fichierchemin, "w") fichier2write=fichier2open.write(Capacityreplace) else: fichieropen.close() print 'Next' break raw_input('Appuie sur <Entrée> ...')en expression régulière et \n pour retour à la ligne bien sur \t* nombre iconnu de tabution(s) et \d* nombre décimal entier si oui il effectue le traitement si non il ferme le fichier et fichier suivant et là je sais pas pourquoi non plus il ne marche pas, pourquoi à cause de l'expression régulère ??? \n ??? ??? \t* ??? ??? \d* ??? ou tout ça il y a t'il un moyen simple de contourner le problème de définir une fonction, et pour glob.glob ça marche comment?
Code : Sélectionner tout - Visualiser dans une fenêtre à part '\t*<Production.>\n\t*<ResourceName>ROFF_0</ResourceName>\n\t*<ResourceNumber>\d*</ResourceNumber>'
PS: ma version de python est la 2.7.2.
Partager