Je ne sais pas si c'est ce que vous recherchez.
Sous un script avec with, vous pouvez changer le nom, le chiffre et l'opérateur des fonctions par leur index (0 = première fonction).
Dans l'en-tête du script, vous définissez une liste de tuples avec les paramètres souhaités, comme par exemple :
[(index, ("NewName"), ("digit"), ("operator")), (index, ("NewName"), ("digit"), ("operator"))]
Vous pouvez choisir n'importe quel indice que vous souhaitez modifier. Si une ou plusieurs propriétés n'ont pas besoin d'être modifiées, laissez le tuple vide.
Exemple : changer uniquement le nom de la fonction d'indice 2 (la troisième fonction, puisque 0 = la première) :
[(2, ("NewName"), (), ())]
Pour modifier les deux premières fonctions :
changes = [(0, ("FuncName1"), ("2"), ("+")), (1, ("FuncName2"), ("2"), ("**"))]
Maintien de différents ensembles de fonctions
Ce script pourrait être principalement utile si vous conservez différents ensembles de propriétés de fonctions en conservant différents changes =
et de commenter toutes les lignes à l'exception de celle dont vous avez besoin actuellement, par exemple.
Comment l'utiliser ?
Copiez le script ci-dessous dans un fichier vide, définissez les paramètres souhaités pour les fonctions à modifier, le chemin d'accès au fichier, enregistrez-le sous script.py et exécutez-le :
python3 /path/to/script.py
Le script :
#!/usr/bin/env python3
# function / name / digit / operator
# (example)
changes = [(0, ("Name1"), (), ()), (1, ("Name2"), ("2"), ("**"))]
subject_file = "/path/to/file_withfunctions"
operators = ["+", "-", "*"] # ** has been taken care of in the script, you can use it in the "changes" line
with open(subject_file) as sample:
lines = [line for line in sample.readlines()]
def first_occurrence(index, string, lines):
area = lines[index:]
func_line = [[i, area[i]] for i in range(len(area))if string in area[i]][0]
func_line[0] = func_line[0]+index
return func_line
functiondata = [[[i, lines[i]],first_occurrence(i, "==", lines)] for i in range(len(lines)) if "[" in lines[i]]
for item in changes:
subject = functiondata[item[0]]
if len(item[1]) != 0: # name
name = subject[0][1].split()[0]
newname = item[1]
lines[subject[0][0]] = lines[subject[0][0]].replace(name, newname)
if len(item[2]) != 0: # digit
or_line = subject[1][1]
character = [ch for ch in or_line if ch.isdigit()][0]
new_line = or_line.replace(character, item[2])
lines[subject[1][0]] = new_line
if len(item[3]) != 0: # operator
or_line = new_line
if "**" in or_line:
new_line = or_line.replace("**", item[3])
else:
character = [ch for ch in operators if ch in or_line][0]
lines[subject[1][0]] = new_line
new_line = or_line.replace(character, item[3])
lines[subject[1][0]] = new_line
with open(subject_file, "wt") as sample:
for line in lines:
sample.write(line)