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
Porque la ultima linea no tiene CRLF :)
saludos
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:)
Podrías hacer algo así para las lineas
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:
import time
numero=2
con=1
while True:
print "Sleep durante "+ str(con) +" Segundos"
time.sleep(numero)
con+=1
saludos
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:
TypeError: a float is required. gracias por avisarme. :¬¬ :laugh:
ThreadBN = BN_init(float(linea[1:]))
saludos
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
Que bien espero ver el proyecto terminado.
saludos ;-)