Je pense que ce premier exemple, bien que très pratique, se passe d’explications tellement il est simple. Je vous invite donc à simplement lire le code.
Fonctions du script
- Ouvre tous les fichiers d’un répertoire source
- Lit les lignes du fichier ouvert, remplace la chaîne motif par la chaîne de remplacement
- Ouvre un fichier du même nom que le fichier source dans le répertoire cible (en écriture) et y inscrit la chaîne transformée
- Referme proprement les fichiers
#!/usr/bin/env python
#-*-coding: utf-8 -*-
'''Script de remplacement d'une chaîne par une autre dans plusieurs fichiers.
Usage : python rempl.py [options] [paramètres]
Options :
-h --help aide.....
-s --source= suivi du nom de repertoire source .......
-c --cible= suivi du nom de repertoire cible
-f suivi de la chaine a remplacer
-g suivi de la nouvelle chaine
Exemple :
python rempl.py -f "toto" -g "titi" -s data/source -c data/cible
'''
import getopt
import sys
import os
import os.path
def usage():
print __doc__
def initialisation(argv):
try:
opts, args = getopt.getopt(argv, "hs:c:f:g:", ["help", "source=","cible="])
except getopt.GetoptError:
usage()
sys.exit(2)
string1,string2 = "",""
source,cible = sys.path[0],sys.path[0]
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-s", "--source"):
source = arg
elif opt in ("-c", "--cible"):
cible = arg
elif (opt == "-f"):
string1 = arg
elif (opt == "-g"):
string2 = arg
if string1 == "":
print "Le texte a remplacer ne peut etre vide...\n"
usage()
sys.exit()
if not os.path.isdir(source):
print "source : ",source
source = os.path.join(os.getcwd(),source)
if not os.path.isdir(source):
print "Le repertoire source est mal defini...\n"
usage()
sys.exit()
if not os.path.isdir(cible):
cible = os.path.join(os.getcwd(),cible)
if not os.path.isdir(cible):
print "Le repertoire cible est mal defini...\n"
usage()
sys.exit()
source = os.path.abspath(source)
cible = os.path.abspath(cible)
if source == cible:
print "Le repertoire source et le repertoire cible ne peuvent etre identiques..."
sys.exit()
print "source : ",source
print "cible : ",cible
print "chaine a remplacer : ",string1
print "chaine de remplacement : ",string2
choix = raw_input("Souhaitez-vous continuer (o/n) ? ")
retour = [choix,source,cible,string1,string2]
return retour
def remplace(source, cible, string1, string2):
filelist = os.listdir(source)
compteur = 0
for myfile in filelist:
soufile = os.path.join(source,myfile)
if os.path.isfile(soufile):
cifile = os.path.join(cible,myfile)
opsoufile = open(soufile,'r')
opcifile = open(cifile,'w')
while 1:
lig = opsoufile.readline()
if lig == '':
break
newlig = lig.replace(string1,string2)
opcifile.write(newlig)
opsoufile.close()
opcifile.close()
compteur += 1
print compteur, " fichiers traités"
def main(argv):
params = initialisation(argv)
if (params[0] != "o"):
print "Aucune donnée n'a été modifiée - Fin de script."
sys.exit()
else:
remplace(params[1],params[2],params[3],params[4])
if __name__ == "__main__":
main(sys.argv[1:])