Tengo un código de Python que tiene una sangría inconsistente. Hay una gran cantidad de pestañas y espacios para empeorar la situación, e incluso no se conserva la sangría del espacio.
El código funciona como se esperaba, pero es difícil de mantener.
¿Cómo puedo arreglar la sangría (como HTML Tidy , pero para Python) sin romper el código?

autopep8proporciona sangría y mucho más: stackoverflow.com/questions/14328406/…Respuestas:
Use el
reindent.pyscript que encuentre en elTools/scripts/directorio de su instalación de Python:Eche un vistazo a ese script para obtener instrucciones detalladas de uso.
fuente
python-examplespaquete.python-examplesesté instalado, encontrará reindent en/usr/share/doc/pythonX.X/examples/Tools/scripts/reindent.py.Si estás usando Vim , mira
:h retab.*: ret * *: retab * : [rango] ret [ab] [!] [nueva_tabstop] Reemplace todas las secuencias de espacios en blanco que contengan un <Tab> con nuevas cadenas de espacios en blanco utilizando el nuevo Tabstop valor dado. Si no especifica un nuevo tamaño de tabstop o es cero, Vim usa el valor actual de 'tabstop'. El valor actual de 'tabstop' siempre se usa para Calcule el ancho de las pestañas existentes. Con!, Vim también reemplaza cadenas de solo normal espacios con pestañas cuando corresponda. Con 'expandtab' activado, Vim reemplaza todas las pestañas con el Número apropiado de espacios. Este comando establece 'tabstop' al nuevo valor dado, y si se realiza en todo el archivo, que es el predeterminado, No debe hacer ningún cambio visible. Cuidado: este comando modifica los caracteres <Tab> dentro de cadenas en un programa en C. Use "\ t" para evitar esto (es un buen hábito de todos modos). ": retab!" También puede cambiar una secuencia de espacios por <Tab> caracteres, que pueden estropear un printf (). {no en Vi} No disponible cuando | + ex_extra | la función fue deshabilitada en tiempo de compilación.Por ejemplo, si simplemente escribe
todas tus pestañas se expandirán en espacios.
Es posible que desee
para asegurarse de que las líneas nuevas no usarán pestañas literales.
Si no estás usando Vim,
reemplazará las pestañas con espacios, suponiendo que las pestañas se detengan cada 8 caracteres, en
file.py(con el original yendo afile.py.bak, por si acaso). Reemplace los 8 con 4 si sus tabulaciones son cada 4 espacios.fuente
Alcanzaría autopep8 para hacer esto:
Nota: E101 y E121 son sangría pep8 (creo que simplemente puede pasar
--select=E1para solucionar todos los problemas relacionados con la sangría, aquellos que comienzan con E1).Puede aplicar esto a todo su proyecto usando la bandera recursiva:
Consulte también Herramienta para convertir código Python para que sea compatible con PEP8 .
fuente
autopep8falla si la sintaxis es incorrecta. puedes confirmar eso usandopython -tt <file.py>autopep8 -i script.pyUsa autopep8
autopep8Formatea automáticamente el código de Python para cumplir con laPEP 8nullstyleguía. Utiliza lapep8utilidad para determinar qué partes de lasnullcodenecesidades deben formatearse.autopep8es capaz de solucionar la mayoría de losnullformattingproblemas que pueden ser reportados porpep8.fuente
Usando Vim, no debería ser más complicado que golpear Esc, y luego escribir ...
... en el archivo que desea cambiar. Eso convertirá todas las pestañas a cuatro espacios. Si también tiene un espaciado inconsistente, entonces será más difícil.
fuente
También hay PythonTidy (ya que dijiste que te gusta HTML Tidy).
Sin embargo, puede hacer mucho más que simplemente limpiar pestañas. Si te gusta ese tipo de cosas, vale la pena echarle un vistazo.
fuente
En la mayoría de los sistemas tipo UNIX, también puede ejecutar:
desde la línea de comando, cambiando el número si desea reemplazar las pestañas con una cantidad de espacios distintos a 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.
fuente
Si eres flojo (como yo), también puedes descargar una versión de prueba de Wingware Python IDE, que tiene una herramienta de reparación automática para sangría en mal estado. Funciona bastante bien http://www.wingware.com/
fuente
El guión reindent no funcionó para mí, debido a que faltaba algún módulo. De todos modos, encontré este
sedcomando que hace el trabajo perfecto para mí:fuente
Prueba Emacs. Tiene 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
fuente
Pruebe IDLE y use Alt+ Xpara encontrar la sangría.
fuente
Tengo una solución simple para este problema. Primero puede escribir ": retab" y luego ": retab!", Entonces todo estaría bien
fuente
:retab" en qué contexto. En vim ?En caso de intentar encontrar una herramienta para hacer que su
2-space indentedscript de Python sea unatab indentedversión, simplemente use esta herramienta en línea:https://www.tutorialspoint.com/online_python_formatter.htm
fuente