Leer archivo y separar por listas ordenadas.

Iniciado por riderz44, 9 Noviembre 2016, 09:34 AM

0 Miembros y 2 Visitantes están viendo este tema.

riderz44

Hola soy nuevo en esto de python y me encontre con un ejercicio que intento resolver pero siempre me quedo cerca. Y debe ser de lo mas facil, si me ayudan puede que mi cabeza no explote  ;D

Consta en:
Leer un archivo txt que contiene palabras y sus significados, ejemplo:

basurita: Partícula de suciedad, especialmente la que se introduce en el ojo.
hacker: pirata informático.
perla: Frase llamativa por desafortunada.
etc

Luego agregar las palabras en una lista, y las definiciones en otra, pero ambas tienen que tener el mismo indice de orden, si listaPalabras[0] entonces listaDefiniciones[0].

Esto es hasta donde llego, trate de varias formas.


Código (python) [Seleccionar]
archivo=open("diccionario.txt","r")
lineas=archivo.readlines()
archivo.close()
listaPalabras=[]
listaDefinicones=[]

def listaPalabras(lineas):
       for elemento in lineas:
             if elemento[-1]==":":
                   listaPalabras.append(elemento[0,-1])
             else:
                   listaPalabras.append(elemento)
        return listaPalabras





tincopasan

seguramente no entendí bien el objetivo, a lo que interprete lo haría así:
Código (python) [Seleccionar]

archivo=open("diccionario.txt","r")
lineas=archivo.readlines()
archivo.close()
listaPalabras=[]
listaDefinicones=[]

def listarPalabras():
    for elemento in lineas:
        palabra=elemento.split(":")
        listaPalabras.append(palabra[0])         #ambos elementos tendrán el mismo índice
        listaDefinicones.append(palabra[1])
   
       
listarPalabras()       
print(listaPalabras[2])            #acá pruebo que tienen los índices de cada lista en este caso 2
print(listaDefinicones[2])


riderz44

Si me funciono a la perfeccion, incluso aprendi sobre split, muchas gracias tincopasan. ;D

riderz44

Perdon que vuelva a colocar el tema en cuestion, pero me han dicho que no puedo usar split en el problema, que tengo que reemplazarlo con while, a lo que viene mi pregunta, de que manera puedo hacerlo? intente de varias formas pero no me sale, se que la condicion es que cuando aparezca ":" agrege en una lista lo que viene antes de ":", y que en la otra lista lo que viene luego, pero no puedo hacer que funcione, help :'(

Once

Cita de: riderz44 en 15 Noviembre 2016, 19:01 PM
Perdon que vuelva a colocar el tema en cuestion, pero me han dicho que no puedo usar split en el problema, que tengo que reemplazarlo con while, a lo que viene mi pregunta, de que manera puedo hacerlo? intente de varias formas pero no me sale, se que la condicion es que cuando aparezca ":" agrege en una lista lo que viene antes de ":", y que en la otra lista lo que viene luego, pero no puedo hacer que funcione, help :'(

Tienes varias formas:

1) Usar un buffer que guarde los caracteres hasta que llegues a un ":" o un salto de linea, y cuando llegues al ":" o el salto de línea  agregas el buffer a la lista y lo limpias
2) Usar slicing: buscas la posición en la cade donde esta el ":" (digamos n)y haces un slicing: cadena[:n] y cadena[n+1:]

PD: Si colocas el código que tienes, sería un poco más fácil orientarse según la idea que tengas

Saludos!

tincopasan

me parece rídiculo lo que te piden, ya que el objetivo de python es simplificar no de complicar, pero bueno hay cada uno...
hice unas modificaciones al código anterior, solo agregue la función len() que supongo la podés usar! sino hay que seguir hueveando y agregando código. Usé while porque lo pediste sino tampoco es necesario!
espero sea más o menos lo que buscas:
Código (python) [Seleccionar]

#-*- coding: utf -8 -*-
archivo=open("diccionario.txt","r")
lineas=archivo.readlines()
archivo.close()
listaPalabras=[]
listaDefinicones=[]

def encuentra(cadena, carac):
    indice = 0
    while indice < len(cadena):
        if cadena[indice] == carac:
            return indice
        indice += 1
    return -1

def listarPalabras():
    for elemento in lineas:
        divisor=encuentra(elemento,":")
        listaPalabras.append(elemento[:divisor])       
        listaDefinicones.append(elemento[divisor+1:])


listarPalabras()       
print(listaPalabras[1])            #acá pruebo que tienen los índices de cada lista en este caso 1
print(listaDefinicones[1])


riderz44

Y la verdad que si, ya me habia puesto a estudiar split para poder presentar el porque esta en el codigo y como funciona, pero que me digan que vuelva con while me molesto, el codigo funciona genial gracias de nuevo tincopasan, lo habia hecho parecido pero tenia lineas de más que no servian, el tuyo es mas optimo.

Once

Cita de: tincopasan en 16 Noviembre 2016, 04:04 AM
me parece rídiculo lo que te piden, ya que el objetivo de python es simplificar no de complicar, pero bueno hay cada uno...

No es ridículo, es una muy buena práctica para adquirir un poco de lógica a la hora de programar, por eso en estos casos es mejor no dar los códigos hechos, sino guiar al usuario para que llegue a la solución por su propia cuenta.

Obviamente, luego de la etapa de aprendizaje, no es muy práctico (y a veces tampoco más eficiente) reinventar la rueda.

Saludos!