Python - Ayuda: Lectura de txt en python

   
Vista:
Imágen de perfil de mario alexander

Ayuda: Lectura de txt en python

Publicado por mario alexander (8 intervenciones) el 27/03/2015 08:21:29
Muy buenas, un saludo cordial primeramente a todos los de esta comunidad, gracias por colaborar por aca y espero o mejor dicho este foro sera mi nuevo sitio de preferencia para aprender y compartir.

Mi duda es la siguiente, estoy realizando un proyecto en mi universidad sobre un simulador de Spritz una aplicacion de android que lee palabras con respecto al tiempo en este caso minutos.

Mi problema hasta ahora es que necesito extraer un texto de un archivo txt se que se utiliza esta expresion:

archivo = open('Ejemplo1.txt','r')

for linea in archivo.readlines():
linea = linea.split()
print linea

mi salida es esta: lo que sale es lo que tengo en mi archivo txt

['\xef\xbb\xbfEn', 'Python,', 'al', 'igual', 'que', 'ocurre', 'con', 'Java,', 'cuando', 'se', 'manipulan', 'cadenas', 'se', 'crean', 'y', 'se', 'destruyen', 'objetos', 'constantemente.', 'Ello', 'supone', 'un', 'mayor', 'uso', 'de', 'memoria', 'y,', 'sobre', 'todo,', 'una', 'baja', 'eficiencia.']
[]
['Pero', 'haciendo', 'un', 'uso', 'inteligente', 'de', 'las', 'caracter\xc3\xadsticas', 'del', 'lenguaje,', 'es', 'posible', 'optimizar', 'estas', 'operaciones', 'de', 'forma', 'considerable.']
[]
['Los', 'siguientes', 'ejemplos', 'utilizan', 'Python', '2.2.2,', 'sobre', 'una', 'm\xc3\xa1quina', 'UltraSparc', 'I:']

como se ve me genera listas y esas listas contienen palabras, he intentado extraer esas palabras una por una con esto:

while i!=len(linea):
print linea[i]
time.sleep(1)
i+=1

mi salida es esta:
En
Python,
al
igual
que
ocurre
con
Java,
cuando
se
manipulan
cadenas
se
crean
y
se
destruyen
objetos
constantemente.
Ello
supone
un
mayor
uso
de
memoria
y,
sobre
todo,
una
baja
eficiencia.

el problema es que esto solo me sirve para la primera lista pero cuando hay un salto de linea [] me lanza un error de fuera de rango y ya no paso a las otras listas he intentado de varias formas como puedo hacer para leer todas las listas menos los saltos de linea pero no he tenido éxito, quisiera que me orientaran como puedo hacer para extraer todas esas palabras de todas esas listas. Muchas gracias de ante mano.

Una idea que no he probado es usar expresiones regulares pero se que de esta forma esta mas directa por que practicamente ya tengo mis palabras separadas en pocas lineas, solo es que no logro visualizar como recorrer todas las listas y no quedarme solo en la primera y jamas pasar a las demas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Ayuda: Lectura de txt en python

Publicado por Alejandro (84 intervenciones) el 29/03/2015 05:23:14
Hola que tal. Solo es cuestion de quitar el operador logico != y reemplazarlo con este: <

1
2
3
4
5
6
7
8
9
archivo = open("documento.txt", 'r')
i = 0
 
for linea in archivo.readlines():
    linea = linea.split()
    while i < len(linea):
        print linea[i]
        i = i + 1
    i = 0

Comentanos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de mario alexander

Ayuda: Lectura de txt en python

Publicado por mario alexander (8 intervenciones) el 29/03/2015 09:54:03
Muchisimas gracias,Logre solucionar el problema de tu forma y mediante otro for anidado y con range de la siguiente forma:

1
2
3
4
5
for linea in map(lambda x: x.strip(),archivo.readlines()):
    if len(linea)>0:
        linea = linea.split()
        #print linea
        for i in range(0,len(linea)):

disculpa nuevamente la molestia sabes como imprimir y borrar una palabra secuencialmente?....No se si es con hilos o con los subprocesos import subprocces

la idea es esta: suponiendo que tengo una lista
lista=['a','b','c','d']

imrpimirla mediante un bucle usando el time.sleep() para manejar el tiempo de impresion pero con la salvedad que:
imprima

''a'' pase 2 segundos y a se borre y se imprima b pero en la misma linea o sobre escrito en el lugar que estaba a

no se si me doy a entender....Jejejeje, en pocas palabras evitar estas impresiones
a b c d

o

a
b
c
d

y sea:
a 2 segundos borramos a y esbribimos b en la misma posicion de a y asi sucesivamente

que necesito para lograr este "efecto"....agradeceria mucho de su ayuda por favor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Ayuda: Lectura de txt en python

Publicado por Alejandro (84 intervenciones) el 29/03/2015 14:58:08
Si se puede hacer, y se usa el retorno de carro: \r. Ahorita no estoy en la pc para hacer un código y probarlo, pero sino me equivoco, el retorno de carro se imprime después de escribir un carácter. Ejemplo

1
2
3
4
for i in range(0,len):
    print cadena[i]
    time.sleep(2)
    print \r

Como dije antes, este código solo es una suposición ya que no estoy frente a mi pc para probarlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de mario alexander

Ayuda: Lectura de txt en python

Publicado por mario alexander (8 intervenciones) el 29/03/2015 18:04:27
Muchisimas gracias por tu ayuda me ha sido vital, efectivamente investigue y el retorno de carro influye, extrañamente esta simulacion no me funciona en la shell IDLE de python 2.7.9 que es con la que forzosamente estoy trabajando, al final me fui a consola cmd(windows) y el efecto si se logra,Uso el retorno de carro antes de imprimir y con el comodin % para darle un formateo, no se si es mi procesamiento pero las palabras las ultimas letras quedan como colgadas en fin averiguare mas, muchas gracias por tu ayuda y nos estaremos viendo por aca para aprender y en un futuro compartir maravillas de este gran lenguajes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Ayuda: Lectura de txt en python

Publicado por Alejandro (84 intervenciones) el 29/03/2015 18:08:17
Si así es, siempre usa la consola para los programas; los IDLE no son buenos, casi siempre dan errores. Suerte y saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de mario alexander

Ayuda: Lectura de txt en python

Publicado por mario alexander (8 intervenciones) el 29/03/2015 18:42:23
Muchas gracias a vos, y bueno otra pregunta algo trillada, mi problema ahora es que cuando en consola imprimo con tu codigo me los lanza con un salto de linea lo solucione agregandole , al final de cada print

El problema es que ahora en consola me quedan como sobrantes de la atenrior palabra, aun cuando aumento el tiempo de velocidad, estoy probando borrando y con espaciados pero no me sale, que hago mal o que podria intentar
?

estoy usando como ultima instruccion:
sys.stdout.flush()

se supone que es una tuberia que me limpia la consola en cada iteracion pero por ejemplo imrpimo "hola" y despues "como" me queda una o dos palabras de hola al fina y se lee comola....algo asi, que hago mal?

1
2
3
4
5
6
7
8
for i in range(0,len(linea)):
            var = linea[i]
            #print'\r%s%%'%var,
            print "      " + var,
            print '\r',
            sys.stdout.flush() #opcional solo para probar
            time.sleep(0.5)
            sys.stdout.flush()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Ayuda: Lectura de txt en python

Publicado por Alejandro (84 intervenciones) el 29/03/2015 20:48:38
Este es el codigo que yo uso para la consola de linux, mas sin embargo, en windows no se si funcione.
Hago uso de sys.stdout.write para que tenga una mejor salida con flush(). Tambien utilizo replace para quitar el salto de linea y uso los escapes de la terminal para borrar las letras

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import time, sys
 
archivo = open("documento.txt", "r")
linea = archivo.readlines()
write = sys.stdout.write
 
for i in range(0,len(linea)):
    var = linea[i]
    var = var.replace('\n', '')
    write(var)
    sys.stdout.flush()
    for _ in range(len(var)):
        time.sleep(1)
        write('\033[D \033[D')
        sys.stdout.flush()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de mario alexander

Ayuda: Lectura de txt en python

Publicado por mario alexander (8 intervenciones) el 29/03/2015 21:16:59
Muchas gracias ahora mismo lo analizo y comento luego, gracias por tu ayuda me ha sido vital.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de mario alexander

Ayuda: Lectura de txt en python

Publicado por mario alexander (8 intervenciones) el 29/03/2015 22:25:36
Pues mi estimado sigo teniendo el mismo problema, noto que cuando la palabra es muy grande por ejemplo "especialmente" y despues viene una corta por ejemplo "si" el resto de la cadena de la palabra grande queda impreso y se lee si pecialmente, intentare meter la variable var en otro arreglo e imprimir la palabra de alli aunque sospecho que no es ahi la solucion sino con el flujo de bits que entiende la consola en este caso windows, intentare ademas los metodos de replace, split y strip a ver que logro obtener.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Ayuda: Lectura de txt en python

Publicado por Alejandro (84 intervenciones) el 29/03/2015 22:55:24
Yo en consola Windows no te puedo hacer de mucha ayuda ya que yo no uso dicho SO. Pero si, ese es el método que yo implemento en Linux y funciona. Suerte y saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de mario alexander

Ayuda: Lectura de txt en python

Publicado por mario alexander (8 intervenciones) el 30/03/2015 00:23:23
Muchas gracias una solucion poco estetica y nada dinamica es que a la var le concatene al fina espacios en blanco para qeu eso me borrara los residuos de la palabra anterior, pero bueno tratare de armar algo para que me genere ese mismo resultado dinamicamente, muchas gracias y saludos a usted tambien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar