TransWikia.com

¿Cómo imprimir datos por columna de un archivo texto en python?

Stack Overflow en español Asked by user183006 on November 27, 2021

Tengo un archivo texto por ejemplo:

Nombre dato1 dato2 dato3
hola, 1, 2, 3 
hola2, 1, 2, 3

Lo que quiero es guardar todo los datos por columna en listas para mas adelante ponerlo en un diccionario este es el código que hice:

def codigo(ruta):  
 try:
  f=open(ruta, 'r')
 except:
  print 'El fichero no existe'
  return
 lines=f.readlines()
 f.close()
 claves=lines[0]
 c=claves
 c=c.split(' ')
 d1=[c[0]]
 d2=[c[1]] 
 d3=[c[2]]
 d4=[c[3]]  
 del lines[0] 
 for i in range(len(lines)):
   g=lines[i]
   g=g.split(', ')
   for i in range(len(g)):
     d1=[[c[0] + g[i]]

Hasta esta parte estaba probando pero no funciona, el primer for parece que no va por toda lista ya que solo saca un elemento de esta.
Si retorno g me da:

['hola2', '1', '2', '3n'] 

Para el segundo for queria ver si por lo menos podria guardar el nombre en la variable que tiene ‘Nombre’ de elemento pero retorna esto:

['Nombre3n'] 

si le pongo:

d1=[[c[0] + g[0]]

retorna:

['Nombrehola2']

Lo que quiero que me devuelva es:

['Nombre', 'hola', 'hola2']
['dato1', '1', '1']
['dato2', '2', '2']
['dato3', '3', '3']

para que luego sea:

{'Nombre':['hola', 'hola2'], 'dato1':[ '1', '1'],....}

One Answer

Veamos algunos problemas:

['hola2', '1', '2', '3n']

El 'n' al final de un string es signo de que no "recortastes" la linea leida desde el archivo. Cuando lees de un archivo, la línea devuelta incluye los "n". Para eliminar todos los caracteres no visibles, se usa rstrip (por la derecha), lstrip por la izquierda, o strip para limpiar ambos lados.

La instrucción

g=g.split(', ')

divide la línea buscando una coma seguida de un espacio. No detectaría una coma entre dos valores (1,2). Mejor es usar ","

Ahora, la solución es crear directamente un diccionario. Las llaves serán los nombres de las columnas. Cada entrada del diccionario contendra una lista de valores, uno de cada fila de datos.

Resumiendo, queda asi:

def codigo(ruta):
    try:
        f = open(ruta, 'r')
    except:
        print
        'El fichero no existe'
        return
    lines = f.readlines()
    f.close()

    c = lines[0].split(' ')
    salida = {}
    for i in range(len(c)):
        c[i] = c[i].strip()
        salida[c[i]] = []

    for j in range(1, len(lines)):
        words = lines[j].split(",")
        for i in range(len(words)):
            salida[c[i]].append(words[i].strip())

    return salida

Comprobación

salida = codigo("/home/candid/inter/datos.txt")
print(salida)

produce el diccionario que buscas

{'Nombre': ['hola', 'hola2'], 'dato1': ['1', '1'], 'dato2': ['2', '2'], 'dato3': ['3', '3']}

Answered by Candid Moe on November 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP