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
| from __future__ import with_statement
#-------------- CREATION DES DEUX FICHIERS NECESSAIRES AU TEST --------------
with open('MAJ.txt','w') as in_maj:
in_maj.write('#Fichier source'\
+'\n\t \aadresseServeur= 192.168.0.1 \b\f\t '\
+'\n\b\f policeLettre = "Courrier" \t'\
+'\n \f\t\a \v cheminTrace = "C:\\Trace" \t'\
+'\n \f\t \v cheminPdf ="C:\\pdf" \b\t\r\n')
with open('cible.txt','w') as in_cible:
in_cible.write('{'\
+'\nadresseServeur=192.168.0.1'\
+'\ncheminTrace="C:\\Trace"'\
+'\ndebugMode="false"'\
+'\nautoriserConnexion="oui"'\
+'\n}')
#-------------- VISUALISATION DES 2 FICHIERS AVANT L' EXECUTION --------------
with open('cible.txt','rb') as cible:
print 'fichier cible AVANT sa mise a jour'
for ln in cible.readlines():
print ' ',[ln]
with open('MAJ.txt','rb') as maj:
print '\nfichier MAJ pour faire la mise a jour'
for ln in maj.readlines():
print ' ',[ln]
print
#-------------- EXECUTION DU TEST ----------------------------------------------
import re
patCible = re.compile('\A{.+}$',re.DOTALL)
patVarVal = re.compile('([^= ]+) *= *([^= ]+)$')
with open('cible.txt','rb+') as cible:
# parcours du fichier cible ====================
li_cible = cible.readlines()
verif_cible = True
if li_cible[0].rstrip('\r\n')!='{':
print "-La premiere ligne numero du fichier a mettre a jour n'est pas conforme:\n",[li_cible[0]]
verif_cible = False
vars_cible = set([])
for i,ln in enumerate(li_cible[1:-1]):
m = patVarVal.match(ln.strip(' \a\b\f\n\r\t\v'))
if m:
vars_cible.add(m.group(1))
else:
print "-La ligne numero "+str(i+1)+" du fichier a mettre a jour n'est pas conforme:\n",[ln]
verif_cible = False
if li_cible[-1]!='}':
print "-La derniere ligne numero du fichier a mettre a jour n'est pas conforme:\n",[li_cible[-1]]
verif_cible = False
# parcours du fichier de mise a jour ============
if verif_cible:
with open('MAJ.txt') as maj:
new_lines = ''
verif_maj = True
line0 = maj.readline()
if line0[0]!='#':
print "-La premiere ligne du fichier de MAJ n'est pas conforme:\n",[line0]
verif_maj = False
for i,ln in enumerate(maj):
m = patVarVal.match(ln.strip(' \a\b\f\n\r\t\v'))
if m:
if m.group(1) not in vars_cible:
new_lines += m.group(1) + ' = ' + m.group(2) + '\n'
else:
print "-La ligne numero "+str(i+1)+" n'est pas conforme:\n",[ln]
verif_maj = False
# ecriture dans le fichier cible
if verif_maj:
cible.seek(-1,2)
cible.write(new_lines+'}')
#-------------- VISUALISATION DU FICHIER APRES ACTUALISATION ----------------
with open('cible.txt','rb') as cible:
print '\nfichier cible APRES sa mise a jour'
for ln in cible.readlines():
print ' ',[ln] |
Partager