Cómo arreglar la sangría de Python

Tengo un código de Python que tiene sangría inconsistente. Existe una gran cantidad de tabs y espacios para empeorar aún más el asunto, e incluso la sangría de espacio no se conserva.

El código funciona como se esperaba, pero es difícil de mantener.

¿Cómo puedo corregir la sangría (como HTML Tidy , pero para Python) sin romper el código?

Use el script reindent.py que encontrará en el directorio Tools/scripts/ de su instalación de Python:

Cambie los archivos Python (.py) para usar sangrías de 4 espacios y sin caracteres de tabulación dura. También recorte los espacios en exceso y las tabs de los extremos de las líneas, y elimine las líneas vacías al final de los archivos. También asegúrese de que la última línea termina con una nueva línea.

Eche un vistazo a ese script para obtener instrucciones de uso detalladas.

Si está usando Vim , vea :h retab .

  *: ret * *: retab *
 : [range] ret [ab] [!] [new_tabstop]
                         Reemplace todas las secuencias de espacios en blanco que contienen un
                          con nuevas cadenas de espacios en blanco usando el nuevo
                         Valor tabstop dado.  Si no especifica una nueva
                         Tamaño de tabulación o es cero, Vim usa el valor actual
                         de 'tabstop'.
                         El valor actual de 'tabstop' siempre se usa para
                         calcular el ancho de las tabs existentes.
                         Con!, Vim también reemplaza cadenas de sólo normal
                         Espacios con tabs cuando corresponda.
                         Con 'expandtab' activado, Vim reemplaza todas las tabs con la
                         Número adecuado de espacios.
                         Este comando establece 'tabstop' al nuevo valor dado,
                         y si se realiza en todo el archivo, que es por defecto,
                         No debe hacer ningún cambio visible.
                         Cuidado: este comando modifica cualquier carácter 
                         Dentro de cuerdas en un progtwig en c.  Usa "\ t" para evitar
                         esto (eso es un buen hábito de todos modos).
                         ": retab!"  También puede cambiar una secuencia de espacios por
                          caracteres, que pueden desordenar un printf ().
                         {no en Vi}
                         No disponible cuando | + ex_extra |  característica fue desactivada en
                         tiempo de comstackción.

Por ejemplo, si simplemente escribe

 :jubilado

Todas tus tabs se expandirán en espacios.

Es posible que desee

 : se et "taquigrafía para: set expandtab

para asegurarse de que las nuevas líneas no usen tabulaciones literales.


Si no estás usando Vim,

 perl -i.bak -pe "s / \ t / '' x (8-pos ()% 8) / ej." archivo.py

reemplazará las tabs con espacios, asumiendo que cada tabulación se detiene cada 8 caracteres, en file.py (con el original yendo a file.py.bak , por si acaso). Reemplace los 8s por 4s si las tabulaciones están cada 4 espacios en su lugar.

Me gustaría alcanzar autopep8 para hacer esto:

 $ # see what changes it would make $ autopep8 path/to/file.py --select=E101,E121 --diff $ # make these changes $ autopep8 path/to/file.py --select=E101,E121 --in-place 

Nota: E101 y E121 son sangría pep8 (creo que simplemente puede pasar --select=E1 para corregir todos los problemas relacionados con la sangría, aquellos que comienzan con E1).

Puede aplicar esto a todo su proyecto usando la bandera recursiva:

 $ autopep8 package_dir --recursive --select=E101,E121 --in-place 

Consulte también la Herramienta para convertir el código Python para que sea compatible con PEP8 .

Utilizar autopep8

autopep8 formatea autopep8 código de Python para ajustarse a la guía de estilo nullstyle PEP 8 . Utiliza la utilidad pep8 para determinar qué partes del nullcode deben formatearse. autopep8 es capaz de solucionar la mayoría de los problemas de nullformatting que se pueden informar con pep8 .

 pip install autopep8 autopep8 script.py # print only autopep8 -i script.py # write file 

Usando Vim, no debería ser más complicado que presionar Esc , y luego escribir …

 :%s/\t/ /g 

… en el archivo que desea cambiar. Eso convertirá todas las tabs a cuatro espacios. Si también tiene un espaciado inconsistente, entonces eso será más difícil.

También hay PythonTidy (ya que dijiste que te gusta HTML Tidy).

Sin embargo, puede hacer mucho más que solo limpiar tabs. Si te gusta ese tipo de cosas, vale la pena echarle un vistazo.

Si eres perezoso (como yo), también puedes descargar una versión de prueba de Wingware Python IDE, que tiene una herramienta de corrección automática para la sangría desordenada. Funciona bastante bien. http://www.wingware.com/

En la mayoría de los sistemas similares a UNIX, también puede ejecutar:

 expand -t4 oldfilename.py > newfilename.py 

desde la línea de comandos, cambie el número si desea reemplazar las tabs con un número de espacios distintos de 4. Puede escribir fácilmente un script de shell para hacer esto con un montón de archivos a la vez, conservando los nombres de archivo originales.

El script reindent no funcionó para mí, debido a que faltaba un módulo. De todos modos, encontré este comando sed que hace el trabajo perfecto para mí:

 sed -r 's/^([ ]*)([^ ])/\1\1\2/' file.py 

Prueba Emacs. Tiene un buen soporte para la sangría necesaria en Python. Por favor, consulte este enlace http://python.about.com/b/2007/09/24/emacs-tips-for-python-programmers.htm

Tengo una solución simple para este problema. Primero puede escribir “: retab” y luego “: retab!”, Luego todo estará bien

Pruebe IDLE y use Alt + X para encontrar la sangría.