[PYTHON] Problema con (len)

Iniciado por DameBanda, 2 Septiembre 2013, 23:27 PM

0 Miembros y 1 Visitante están viendo este tema.

DameBanda

Hola a todos

Iré directo al grano ya que mi duda es simple:

en un archivo de texto hago:


f = open("texto.txt")
for linea in f:
      print len(linea)



Cuando el resultado debiera ser:


4
4
4
4
4


El resultado es:


4
4
4
4
3


El contenido de texto.txt es


B02
R04
G06
P08
Y10


Si me decis vosotros los expertos en la materia porque sucede esto y como solucionarlo os estaría tremendamente agradecido :D
"Amarillo, pensó" Douglas Adams




[img]http:/

Danyfirex

Porque la ultima linea no tiene CRLF :)

saludos

DameBanda

Ok, fallo mio. Al final lo solucioné de una forma algo chapuzera:

Puse una linea mas al archivo y hice un elif para controlar cuando llegara ahí:

Citarfor linea in cancion_scr:
         cancion_scr = load_song_scr("SONG1.txt", SONG_DIR)
         if linea[0] == 'B':
            ThreadBN = BN_init(linea[1:])
            ThreadBN.start()
         elif linea[0] == 'R':
            ThreadRN = RN_init(linea[1:])
            ThreadRN.start()
         elif linea[0] == 'G':
            ThreadGN = GN_init(linea[1:])
            ThreadGN.start()
         elif linea[0] == 'P':
            ThreadPN = PN_init(linea[1:])
            ThreadPN.start()
         elif linea[0] == 'Y':
            ThreadYN = YN_init(linea[1:])
            ThreadYN.start()
         elif linea[0] == 'E':
            eos()

Es un codigo la mar de chapuzero, lo sé. No me mateis por ello.

Por cierto. Sabeis si es normal que un
time.sleep(i) #siendo i = 2
De como resultado:

TypeError: a float is required

Lo pregunto aquí por no abrir otro post. (si hago mal avisadme  :rolleyes:)
"Amarillo, pensó" Douglas Adams




[img]http:/

Danyfirex

Podrías hacer algo así para las lineas

Código (python) [Seleccionar]
f = open("1.txt","r")
for cadena in f.read().split('\n'):
      print len(cadena)
f.close()



Lo del timer a mi me funciona bien asi:

Código (python) [Seleccionar]
import time
numero=2
con=1
while True:
    print "Sleep durante "+ str(con) +" Segundos"
    time.sleep(numero)
    con+=1



saludos

DameBanda

Ok. Me estas salvando la vida  ;D

Eso si, en el timer sigo atascado. tengo algo así:

class BN_init(threading.Thread):

def __init__(self, tiempo):
threading.Thread.__init__(self)
self.tiempo = tiempo

def run(self):
time.sleep(self.tiempo)
screen.blit(BN.image, BN.rect)



La cosa es meter el timer en un hilo independiente para que el sleep no paralice el resto del programa (o eso creo)

A la clase la llamo con el codigo que te pase antes:


cancion_scr = load_song_scr("SONG1.txt", SONG_DIR)

for linea in cancion_scr:
cancion_scr = load_song_scr("SONG1.txt", SONG_DIR) #esto es para que la cargue en cada ciclo
if linea[0] == 'B':
ThreadBN = BN_init(linea[1:])
ThreadBN.start()


y la funcion load_song_scr simplemente carga el archivo de texto:


def load_song_scr(nombre, dir_cancion):
ruta = os.path.join(dir_cancion, nombre)
try:
file = open(ruta)
except:
print "Error, no se puede cargar la transcripcion: ", ruta
sys.exit(1)
return file


El contenido de SONG1.txt es:


B2
R4
G6
P8
Y11
END


Y cuando ejecuto todo el resultado que da es:


Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python27\Lib\threading.py", line 808, in __bootstrap_inner
    self.run()
  File "PYGAME TEST 1.py", line 127, in run
    time.sleep(delay)
TypeError: a float is required


Ya no se que mas puedo hacer. Si sustituyo self.tiempo por un numero funciona.
Si hago un tiempo = 10 tambien
el contenido de self.tiempo es un numero entero (lo he comprovado imprimiendo la variable antes de ejecutar el sleep

Alguna idea? Gracias por adelantado  :rolleyes:
"Amarillo, pensó" Douglas Adams




[img]http:/

Danyfirex

TypeError: a float is required. gracias por avisarme.  :¬¬  :laugh:

Código (python) [Seleccionar]
ThreadBN = BN_init(float(linea[1:]))

saludos

DameBanda

Gracias. (estoy muy verde, si)

El caso es que ya habia probado a convertir a float antes (aunque dentro del propio thread) y no me habia funcionado.

Ahora si. Con esto creo que ya tengo casi todo el code hecho.

La idea es hacer una especie de guitar hero con pygame  ;D

Cuando lo tenga os posteo el code y le hechais un ojo

Salu2
"Amarillo, pensó" Douglas Adams




[img]http:/

Danyfirex

Que bien espero ver el proyecto terminado.

saludos  ;-)