[Python-es] fichero y linea en blanco

1,324 views
Skip to first unread message

(P@vel)

unread,
Dec 7, 2010, 9:43:47 AM12/7/10
to La lista de python en castellano
Tengo el siguiente problema, estoy leyendo un fichero pero quiero que al leer una linea en blanco no haga nada, estaba probando el codigo de abajo pero me imprime la linea en blanco cada vez que la encuentra

f = open('/home/pavel/Escritorio/char/file.txt')
for line in f.readlines():
    if len(line)==1:     # if line=='\n'
        continue
    else:
        print line[0]+line[1]+line[2]+line[3]+line[4]+line[5]+line[6]+line[7]+" "+line[24]+line[32]
f.close()

Jhonatan Sneider Salguero Villa

unread,
Dec 7, 2010, 10:06:20 AM12/7/10
to La lista de python en castellano
_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

el problema es que una linea en "blanco" puede estar llena con espacios y por lo tanto medir mas de 1, 
prueba usar el método strip sin argumentos para eliminar todos los espacios de la linea, 
si solo contiene espacios en blanco la expresión se evaluara como falsa:

if not line.strip():
        continue

Pau Cervera

unread,
Dec 7, 2010, 10:14:12 AM12/7/10
to La lista de python en castellano
Buenas,

no será que le falta una coma al print?

>>> f = open('c:/py/test.txt')
>>> for line in f.readlines():
...     if len(line) > 1:
...             print line,
...
linea uno
linea dos
linea tres, siguiente en blanco
linea cinco
liniea final
>>>


-----
Pau

Python..., what else?


2010/12/7 Jhonatan Sneider Salguero Villa <sney...@gmail.com>

Oscar Carballal Prego

unread,
Dec 7, 2010, 10:25:06 AM12/7/10
to La lista de python en castellano
El 07/12/2010, a las 16:06, Jhonatan Sneider Salguero Villa escribió:



El 7 de diciembre de 2010 09:43, (P@vel) <pdl...@uci.cu> escribió:
Tengo el siguiente problema, estoy leyendo un fichero pero quiero que al leer una linea en blanco no haga nada, estaba probando el codigo de abajo pero me imprime la linea en blanco cada vez que la encuentra

f = open('/home/pavel/Escritorio/char/file.txt')
for line in f.readlines():
    if len(line)==1:     # if line=='\n'
        continue
    else:
        print line[0]+line[1]+line[2]+line[3]+line[4]+line[5]+line[6]+line[7]+" "+line[24]+line[32]
f.close()

el problema es que una linea en "blanco" puede estar llena con espacios y por lo tanto medir mas de 1, 
prueba usar el método strip sin argumentos para eliminar todos los espacios de la linea, 
si solo contiene espacios en blanco la expresión se evaluara como falsa:

if not line.strip():
        continue

También puedes utilizar el método isspace(). Si hay espacios se evalúa como verdadera.

if line.isspace():
continue

Pau Cervera

unread,
Dec 7, 2010, 10:25:03 AM12/7/10
to La lista de python en castellano
Perdón, se me ha ido la olla. :)
Hazle caso a Johnatan. El condicional funciona porqué un empty sring es False en python.

Si quieres sacarles el newline y hacerlo todo de una tirada:

>>> f = open('c:/py/test.txt')
>>> for line in map(lambda x: x.strip(), f.readlines()):
...     if len(line) > 0:
...             print line
...
linea uno
linea dos
linea tres, siguiente en blanco
linea cinco
liniea final
>>>

-----
Pau

Python..., what else?


2010/12/7 Pau Cervera <pau.c...@gmail.com>

Arnau Sanchez

unread,
Dec 7, 2010, 7:00:42 PM12/7/10
to pyth...@python.org
On Tue, 7 Dec 2010 09:43:47 -0500 (CST) (P@vel) wrote:

> f = open('/home/pavel/Escritorio/char/file.txt')
> for line in f.readlines():
> if len(line)==1: # if line=='\n'
> continue
> else:
> print line[0]+line[1]+line[2]+line[3]+line[4]+line[5]+line[6]+line[7]+"
> "+line[24]+line[32] f.close()

Una posible refactorización más pythonica:

for line in open(path):
if not line.isspace():
print(line[:8] + " " + line[24] + line[32])

Y no estaría mal comprobar que la línea tiene una longitud mayor a 32 antes de
ponerse a extraer caracteres.

Chema Cortes

unread,
Dec 9, 2010, 5:15:26 AM12/9/10
to La lista de python en castellano

Es posible que tengas problemas con los finales de línea. Puedes usar
el modo universal "rU" para evitar este problema.


Ya han dado varias soluciones en otros mensajes. Aquí va la mía:

ruta='/home/pavel/Escritorio/char/file.txt'
fich=(line[:-1] for line in open(ruta,"rU") if not line.isspace())

for line in fich:
print(line[:8]+" "+line[24]+line[32])

Reply all
Reply to author
Forward
0 new messages