es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leyendo indentaciones de Python en archivos dentro de un proyecto.

En la documentación de Python aquí se explica cómo se calculan las indentaciones durante la programación con Python. Aquí hay otra explicación, además de esto:

Por ejemplo:

if foo:
   if bar:
       x = 42
else:
    print foo

es analizado como:

<if> <foo> <:>                    [0]
<INDENT> <if> <bar> <:>           [0, 4]
<INDENT> <x> <=> <42>             [0, 4, 8]
<DEDENT> <DEDENT> <else> <:>      [0]
<INDENT> <print> <foo>            [0, 2]
<DEDENT> 

Ahora, me pregunto si estos datos sobre los espacios de indentación, dentro de corchetes [], se guardan en algún lugar, o si puedo leerlos de alguna manera para cada archivo en un proyecto de Python.

¡Gracias por cualquier sugerencia!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Python-3.x, análisis léxico, parsing e indentación, puedo confirmar que la información sobre los espacios de indentación dentro de los corchetes [] no se guarda en ningún lugar de manera predeterminada. Sin embargo, puede utilizar el módulo tokenize incorporado de Python para generar una secuencia de tokens a partir de una cadena de código. Estos tokens contienen información sobre el número de línea, la posición de columna y el tipo de cada léxico en el código, incluyendo los tokens de indentación.

    Para extraer información sobre la indentación de un archivo Python, puede utilizar el siguiente fragmento de código:

    import tokenize
    
    with open('example.py') as f:
        tokens = tokenize.generate_tokens(f.readline)
        indent_levels = [0]
        for toknum, tokval, _, _, _ in tokens:
            if toknum == tokenize.INDENT:
                indent_levels.append(len(tokval))
            elif toknum == tokenize.DEDENT:
                indent_levels.pop()
            elif toknum != tokenize.NEWLINE and indent_levels[-1] != len(tokval):
                print(f"Línea {lineno}: longitud de indentación inválida: {len(tokval)}")
            lineno += 1
    

    Este código lee el archivo ‘example.py’ línea por línea y genera una secuencia de tokens utilizando tokenize.generate_tokens(). La lista indent_levels realiza un seguimiento del nivel de indentación actual, que se incrementa cada vez que se encuentra un token INDENT y se decrementa cada vez que se encuentra un token DEDENT. Si se detecta una longitud de indentación inválida, se imprime un mensaje de error.

    Con este código, puede extraer y analizar los niveles de indentación para cada línea de código en un proyecto Python.

Comments are closed.