Autor
|
Tema: Python ordenamiento a la hora de impresion (Leído 3,277 veces)
|
metalost
Desconectado
Mensajes: 10
|
#-*-coding:utf-8-*- archi=open('datos.txt','a') idss= 0 ids =[] nombres =[] apellido=[] CID=[] Direccion=[] telefono=[] x=1 while x!=0: idss+=1 nomb = raw_input("Ingrese su nombre: ") nombres.append(nomb) apell= raw_input ("Ingrese el apellido: ") apellido.append(apell) Cde= raw_input ("Ingrese su Cedula: ") CID.append(Cde) direc= raw_input ("Ingrese su direccion: ") Direccion.append(direc) tlf = raw_input("Ingrese su numero de telefono: ") telefono.append(tlf) ids.append(idss) ingreso=raw_input("Desea ingresar alguien mas? S/N: ") if ingreso== "N" or ingreso == "n": x=0 txta=str(idss) +") " +nomb+" "+apell+" "+Cde+ " "+direc+ " "+tlf archi.write(txta) archi.write("\n") archi.close()
El programa como se puede apreciar, recolecta una serie de datos, y las añade a un archivo .txt pero... tengo un problema y es que se supone que cada dato, debe estar bajo una columna de su respectiva sección... Ejemplo "Nombre" deberia mostrarse asi como Nombre Apellido Telefono 1) pepe castellano 999912 2) felipe manriquefortiquepalacios 92399123123 como pueden ver, si ejecutamos el programa suponiendo que coloquemos de manera manual en el txt la parte de nombre, apellido y telefono, de manera que ya el codigo coloque los datos, existe el problema de que pase como en el ejemplo la parte 2) que, los caracteres exceden su campo, dezplasando asi al siguiente y descuadrando la tabla del .txt ... necesito solucionar especificamente este problema con el .txt Mi pregunta es si hay algun comando que diga que si se hay tantos caracteres haga un salto de linea, de manera que, no invada al campo siguiente o algo asi... ¿Que solucion me recomiendan? (Como pueden ver, esta en Python 2)
|
|
« Última modificación: 21 Mayo 2017, 04:56 am por metalost »
|
En línea
|
|
|
|
Once
|
Así por encima, loq ue se me ocurre que puedes hacer es, no guardar los datos en el archivo de texto sino hasta que ya los tengas todos recolectados, éstos los vas guardando (puede ser en listas) y una vez tienes los datos guardados, buscas en las listas los que tienen mayor longitud y usas ese dato para generar la cantidad de espacios que separen cada columna. Edit: No creo que me explicara muy bien, así que te dejo este ejemplo (fue lo primero que se me ocurió) sólo adáptalo a tu necesidad. columna_uno = ["hola", "soy", "Once"] columna_dos = ["Esta", "es", "una"] max_columna_uno = max(map(len, columna_uno)) max_columna_dos = max(map(len, columna_dos)) for e1, e2 in zip(columna_uno, columna_dos): print("|{0}|{1}|".format(e1.ljust(max_columna_uno + 1), e2.ljust(max_columna_dos + 1)))
El resultado es algo así: Saludos.
|
|
« Última modificación: 21 Mayo 2017, 05:46 am por Once »
|
En línea
|
|
|
|
metalost
Desconectado
Mensajes: 10
|
Gracias por tu solucion once, pero creo que no me sirve del todo, porque lo necesito añadir todo a un .txt, y ese .txt, deberi apoder añadir mas informacion... es decir, cerrarlo, abrirlo, que mantenga la informacion que ya tenia, y agregar mas sin que se descuadre nuestro "Cuadro" Alguna otra solucion? Muchas gracias por su ayuda Estaba pensando en algo que usara el max_columna_uno = max(map(len, columna_uno))
Pero con una condicion, que si excede x numero de caracteres, haga un salto de linea, ¿Eso se podria hacer?
|
|
« Última modificación: 21 Mayo 2017, 16:36 pm por metalost »
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
partamos de la base que desde el inicio ya está incompleto, deberías haber asignado el espacio que quieres que ocupe cada item(nombre,apellido,etc). Imagina que creas una tabla, le asignas el tamaño justamente para que no se pisen los datos. en resumen podrías agregar la línea: nomb = input("Ingrese su nombre: ") nomb='{:10}'.format(nomb) #acá le doy 10 lugares al nombre, claro que esto es a tu criterio nombres.append(nomb)
de esta simple forma quedan ordenados con un espacio asignado.
|
|
|
En línea
|
|
|
|
Once
|
En ese caso, no te sirve formatear antes de agregar la información al archivo, ya que no sabes que información va a ir a continuación. (Por eso en el ejemplo que te puse arriba, necesitabas la lista con la info [bcompleta[/b])
Para solucionarlo en tu caso, tendrías que, cada tanto, estar abriendo el archivo, leer la información que está ahí, formatearla y guardar de nuevo la información ya formateada en el archivo.
Ahora, para saber si la cadena se pasa de una cantidad de caracteres específica, usa la función len(cadena) y un condicional, para agregar una nueva línea, lo puedes hacer imprimiendo: "\r\n"
Saludos.
|
|
|
En línea
|
|
|
|
LaThortilla (Effort)
Desconectado
Mensajes: 234
¿En que vida harás lo que en esta no?
|
Fácil compañero.... A mi forma de ver lo que quieres en si.... es almacenar información de manera estructurada? si es así, la solución más apropiada seria la que te ofrecio Once... aun que yo agregaría un separador más complejo o filtraria lo que ingresa el usuario .... por que esto puede modificar la estructura de tu base... algo asi como el SQL injection. print("|{0}|{1}|".format(e1.ljust(max_columna_uno + 1), e2.ljust(max_columna_dos + 1)))
pero si lo que quieres es solo que se vea chulo en tu archivo pues usa como separador el caracter de tabuladortxta = "{0}\t{1}".format(e1.ljust(max_columna_uno + 1), e2.ljust(max_columna_dos + 1)) archi.write(txta) archi.write("\n")
|
|
« Última modificación: 28 Mayo 2017, 02:25 am por Effort »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Metodos de Ordenamiento en c#
.NET (C#, VB.NET, ASP)
|
alexvem
|
0
|
38,731
|
4 Agosto 2008, 18:02 pm
por alexvem
|
|
|
Metodos de Ordenamiento
Programación Visual Basic
|
...:::Téotl:::...
|
4
|
13,548
|
15 Junio 2012, 22:55 pm
por raul338
|
|
|
Obtengo la hora 1 hora adelantada WTF!?
PHP
|
[u]nsigned
|
0
|
1,640
|
18 Febrero 2016, 22:36 pm
por [u]nsigned
|
|
|
(Python 3.5) Hacer una accion a una determinada hora
Scripting
|
BigKaz
|
5
|
3,921
|
10 Diciembre 2016, 19:01 pm
por antkk
|
|
|
Python, espacios para impresion en pantalla
Scripting
|
metalost
|
1
|
2,762
|
21 Mayo 2017, 01:08 am
por engel lex
|
|