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.

Conversión a lista de listas desde un archivo en Python

Estoy tratando de ejecutar un archivo C desde un código de Python ejecutando el ejecutable de C. A continuación, se muestra mi código:

import subprocess
import sys

dataset = sys.argv[1]
def func():
    subprocess.run(['/home/dev/exec_file', dataset, 'outfile'])
    f_result = []
    f = open('outfile', 'r')
    content = f.read()
    f_result.append(content)
    print(f_result)
    #print(content.rstrip('\n'))
    return f_result

Aquí, si simplemente escribo print(content.rstrip('\n')), el resultado sería:

*,*,1,*,0
*,*,2,2,1
*,*,*,3,1
*,*,*,4,2
*,*,3,*,2

Ahora quiero retornar una lista de listas. Esto se vería así:

[['*', '*', '1', '*', '0'], ['*', '*', '2', '2', '1'], ['*', '*', '*', '3', '1'], ['*', '*', '*', '4', '2'], ['*', '*', '3', '*', '2']]

En mi enfoque anterior, print(f_result) muestra el resultado como: ['*,*,1,*,0\n*,*,2,2,1\n*,*,*,3,1\n*,*,*,4,2\n*,*,3,*,2\n']

¿Cómo puedo lograr esto y retornar una lista de listas? Por favor, ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para devolver una lista de listas, debes modificar la función func() para dividir la cadena con saltos de línea (\n) y luego dividir cada línea por comas (,). Aquí está el código modificado:

    import subprocess
    import sys
    
    dataset = sys.argv[1]
    
    def func():
        subprocess.run(['/home/dev/exec_file', dataset, 'outfile'])
        f_result = []
        f = open('outfile', 'r')
        content = f.read()
        rows = content.strip().split('\n')
        for row in rows:
            f_result.append(row.split(','))
        print(f_result)
        return f_result
    

    El método strip() se utiliza para eliminar los espacios en blanco iniciales o finales de la cadena. Luego, se utiliza el método split() para dividir la cadena por saltos de línea (\n) para obtener las filas. Finalmente, se utiliza un bucle para dividir cada fila por comas (,) y se agrega a una nueva lista (f_result).

    Ahora, si llamas a la función func(), devolverá una lista de listas como se desea:

    result = func()
    print(result)
    # Output: [['*', '*', '1', '*', '0'], ['*', '*', '2', '2', '1'], ['*', '*', '*', '3', '1'], ['*', '*', '*', '4', '2'], ['*', '*', '3', '*', '2']]
    

Comments are closed.