python:programmes:indentation
Ceci est une ancienne révision du document !
Réindenter un script Python
Ce script permet de réindenter un script python avec au choix les tabulation ou les espaces.
./reindent.py <fichier à réindenter> <fichier de sortie> [tab|space] [nombre]
Exemple pour réindenter le fichier toto.py en mettant 3 espaces pour la réindentation :
./reindent.py toto.py new_toto.py space 3
#!/usr/bin/env python
import sys, os
def usage(error=0):
print(sys.argv[0] + \
""" <source file> <new indent file> [type_indent] [count]
where type indent is :
* tab for adding tabs
* space for adding spaces
Ex : """ + sys.argv[0]+ """ file.py new_indent_file.py space 4 """)
sys.exit(error)
if not os.path.isfile(sys.argv[1]):
print(sys.argv[1] + " n'est pas un fichier valide !")
usage(1)
try:
if sys.argv[3] == "tab": sep = "\t"
elif sys.argv[3] == "space": sep = " "
else:
print("Seuls les arguments space et tab sont autorisés !")
usage(1)
except IndexError:
sep = "\t"
try:
sep_count = int(sys.argv[4])
except IndexError:
sep_count = 1
except ValueError:
print(sys.argv[4] + " doit être un nombre !")
usage(1)
sep = sep * sep_count
num_line, score, indent = 0, list(), dict()
fr, fw = open(sys.argv[1], 'r'), open(sys.argv[2], 'w')
for line in fr:
nb_tab, nb_space = 0, 0
num_line += 1
for i in range(len(line)):
if line[i] == ' ': nb_space += 1
elif line[i] == '\t': nb_tab += 1
else:
score.append(nb_tab * 1 + nb_space)
if num_line == 1:
indent[score[num_line - 1]] = 0
fw.write(line[i:])
else:
if score[num_line - 1] not in indent and score[num_line - 1] > score[num_line - 2]:
indent[score[num_line - 1]] = indent[score[num_line - 2]] + 1
fw.write(sep * indent[score[num_line - 1]] + line[i:])
elif score[num_line - 1] not in indent and score[num_line - 1] <= score[num_line - 2]:
print("Problème d'indentation dans le programme source, vérifier l'indentation ligne " + num_line + "!\nArrêt du programme...")
sys.exit(1)
else:
fw.write(sep * indent[score[num_line - 1]] + line[i:])
break
print(num_line," Score : ", score[num_line - 1],"\tTab : ",nb_tab,"\tSpace : ",nb_space)
fr.close()
fw.close()
python/programmes/indentation.1329000855.txt.gz · Dernière modification : de root
