python:programmes:indentation
Réindenter un script Python
Ce script permet de réindenter un script python avec au choix les tabulations 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
- reindent.py
#!/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 (default) * space for adding spaces where count is the number of type_indent : * int (1 by default) 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.txt · Dernière modification : 2013/03/12 23:06 de root