Autor
|
Tema: Ayuda con python (Barras de progreso). (Leído 4,127 veces)
|
aalleexx
Desconectado
Mensajes: 6
|
Hola, estoy haciendo un script para generar combinaciones de palabras con las letras mknusculas del abecedario y los números, me gustaría ponerle una barra de progreso en la que muestre lo que llevael programa echo Ej: si de las 100 combinaciones que tiene que hacer encuentra 50, que ponga 50%, pero soy incapaz de hacerlo, muchas gracias a todos de antemano. Aquí va el programita. import time import sys
length=int(raw_input("Numero maximo de caracteres: ")) name=raw_input("Introduce el nombre del fichero con formato (.txt): ") tic = time.clock() print ("Ejecutando, espera"); lista=[0 for x in xrange(length)] x=length-1 string="abcdefghijklnmopqrstuvwxyz1234567890" list_of_results=[] file1=file(name,"w") while(x>-1): result="" if lista[x]==len(string)-1: for z in xrange(length): result+=string[lista[z]] lista[x]=0 x-=1 elif x==length-1: for z in xrange(length): result+=string[lista[z]] lista[x]+=1 else: for z in xrange(length): result+=string[lista[z]] lista[x]+=1 if x>0: x+=1 else: x=length-1 file1.write(result+"\n") toc = time.clock() ttn = toc - tic print ("Completado en"+str(ttn)+" segundos."); print ("Revisa "+str(name)+" en el directorio");
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
1) ¿dónde está el código que intentaste de la barra? 2)hay varias formas de hacerlo ya sea en consola o en modo gráfico 3)en modo consola sería algo asi: "***********" barra vacía y "######****" barra en progreso el porcentaje de progreso se obtiene de forma matemática por ej: vacia= 0 total=90 palabras hechas=? porcentaje que se lleva es = ? x 100 / total (una simple regla de 3) 4) en modo gráfico depende que módulo uses: TK, GTK,etc
|
|
|
En línea
|
|
|
|
aalleexx
Desconectado
Mensajes: 6
|
Hola y gracias por contestar, pero sigo sin entenderlo, el codigo que use, lo puse aparte en un modulo, y no esta ahi, el codigo para la barra de progreso es (modulo.py): import sys import time
class ProgressBar(object): def __init__(self, start=0, end=10, width=12, fill='=', blank='.', format='[%(fill)s>%(blank)s] %(progress)s%%', incremental=True): super(ProgressBar, self).__init__()
self.start = start self.end = end self.width = width self.fill = fill self.blank = blank self.format = format self.incremental = incremental self.step = 100 / float(width) #fix self.reset()
def __add__(self, increment): increment = self._get_progress(increment) if 100 > self.progress + increment: self.progress += increment else: self.progress = 100 return self
def __str__(self): progressed = int(self.progress / self.step) #fix fill = progressed * self.fill blank = (self.width - progressed) * self.blank return self.format % {'fill': fill, 'blank': blank, 'progress': int(self.progress)}
__repr__ = __str__
def _get_progress(self, increment): return float(increment * 100) / self.end
def reset(self): """Resets the current progress to the start point""" self.progress = self._get_progress(self.start) return self
class AnimatedProgressBar(ProgressBar): """Extends ProgressBar to allow you to use it straighforward on a script. Accepts an extra keyword argument named `stdout` (by default use sys.stdout) and may be any file-object to which send the progress status. """ def __init__(self, *args, **kwargs): super(AnimatedProgressBar, self).__init__(*args, **kwargs) self.stdout = kwargs.get('stdout', sys.stdout)
def show_progress(self): if hasattr(self.stdout, 'isatty') and self.stdout.isatty(): self.stdout.write('\r') else: self.stdout.write('\n') self.stdout.write(str(self)) self.stdout.flush()
if __name__ == '__main__': p = AnimatedProgressBar(end=100, width=80)
while True: p + 5 p.show_progress() time.sleep(0.1) if p.progress == 100: break print #new line
y el codigo que e actualizado para que me coja de ahi la barra es: import time import sys from modulo import ProgressBar p = ProgressBar() car=raw_input("Caracteres a usar: ") length=int(raw_input("Numero maximo de caracteres: ")) name=raw_input("Introduce el nombre del fichero con formato (.txt): ") tic = time.clock() print ("Ejecutando, espera"); lista=[0 for x in xrange(length)] x=length-1 string=car list_of_results=[] file1=file(name,"w") while(x>-1): result="" if lista[x]==len(string)-1: for z in xrange(length): result+=string[lista[z]] lista[x]=0 x-=1 elif x==length-1: for z in xrange(length): result+=string[lista[z]] lista[x]+=1 else: for z in xrange(length): result+=string[lista[z]] lista[x]+=1 if x>0: print p+1 x+=1 else: x=length-1 file1.write(result+"\n") toc = time.clock() ttn = toc - tic print ("Completado en"+str(ttn)+" segundos."); print ("Revisa "+str(name)+" en el directorio"); es esto lo que me pides? si tucrees conveniente cambiar el codigo del modulo por otro o lo que sea... Pero gracias
|
|
« Última modificación: 11 Diciembre 2015, 17:06 pm por aalleexx »
|
En línea
|
|
|
|
aalleexx
Desconectado
Mensajes: 6
|
Crees que habría que cambiar el módulo o de modulo? Hola y gracias por contestar, pero sigo sin entenderlo, el codigo que use, lo puse aparte en un modulo, y no esta ahi, el codigo para la barra de progreso es (modulo.py): import sys import time
class ProgressBar(object): def __init__(self, start=0, end=10, width=12, fill='=', blank='.', format='[%(fill)s>%(blank)s] %(progress)s%%', incremental=True): super(ProgressBar, self).__init__()
self.start = start self.end = end self.width = width self.fill = fill self.blank = blank self.format = format self.incremental = incremental self.step = 100 / float(width) #fix self.reset()
def __add__(self, increment): increment = self._get_progress(increment) if 100 > self.progress + increment: self.progress += increment else: self.progress = 100 return self
def __str__(self): progressed = int(self.progress / self.step) #fix fill = progressed * self.fill blank = (self.width - progressed) * self.blank return self.format % {'fill': fill, 'blank': blank, 'progress': int(self.progress)}
__repr__ = __str__
def _get_progress(self, increment): return float(increment * 100) / self.end
def reset(self): """Resets the current progress to the start point""" self.progress = self._get_progress(self.start) return self
class AnimatedProgressBar(ProgressBar): """Extends ProgressBar to allow you to use it straighforward on a script. Accepts an extra keyword argument named `stdout` (by default use sys.stdout) and may be any file-object to which send the progress status. """ def __init__(self, *args, **kwargs): super(AnimatedProgressBar, self).__init__(*args, **kwargs) self.stdout = kwargs.get('stdout', sys.stdout)
def show_progress(self): if hasattr(self.stdout, 'isatty') and self.stdout.isatty(): self.stdout.write('\r') else: self.stdout.write('\n') self.stdout.write(str(self)) self.stdout.flush()
if __name__ == '__main__': p = AnimatedProgressBar(end=100, width=80)
while True: p + 5 p.show_progress() time.sleep(0.1) if p.progress == 100: break print #new line
y el codigo que e actualizado para que me coja de ahi la barra es: import time import sys from modulo import ProgressBar p = ProgressBar() car=raw_input("Caracteres a usar: ") length=int(raw_input("Numero maximo de caracteres: ")) name=raw_input("Introduce el nombre del fichero con formato (.txt): ") tic = time.clock() print ("Ejecutando, espera"); lista=[0 for x in xrange(length)] x=length-1 string=car list_of_results=[] file1=file(name,"w") while(x>-1): result="" if lista[x]==len(string)-1: for z in xrange(length): result+=string[lista[z]] lista[x]=0 x-=1 elif x==length-1: for z in xrange(length): result+=string[lista[z]] lista[x]+=1 else: for z in xrange(length): result+=string[lista[z]] lista[x]+=1 if x>0: print p+1 x+=1 else: x=length-1 file1.write(result+"\n") toc = time.clock() ttn = toc - tic print ("Completado en"+str(ttn)+" segundos."); print ("Revisa "+str(name)+" en el directorio"); es esto lo que me pides? si tucrees conveniente cambiar el codigo del modulo por otro o lo que sea... Pero gracias
|
|
|
En línea
|
|
|
|
aalleexx
Desconectado
Mensajes: 6
|
1) ¿dónde está el código que intentaste de la barra? 2)hay varias formas de hacerlo ya sea en consola o en modo gráfico 3)en modo consola sería algo asi: "***********" barra vacía y "######****" barra en progreso el porcentaje de progreso se obtiene de forma matemática por ej: vacia= 0 total=90 palabras hechas=? porcentaje que se lleva es = ? x 100 / total (una simple regla de 3) 4) en modo gráfico depende que módulo uses: TK, GTK,etc
El módulo que estoy usando es Pyprind, Y el codigo al que le quiero añadir la barra es: #v2.0
#imports import time
#Variables de input car=raw_input("Caracteres a usar: ") length=int(raw_input("\nMaximo numero de caracteres: ")) name=raw_input("\nExtension y nombre de archivo: ")
#Ejecutando tic = time.clock() print ("Ejecutando, espera"); lista=[0 for x in xrange(length)] x=length-1 string=car list_of_results=[] file1=file(name,"w") while(x>-1): result="" if lista[x]==len(string)-1: for z in xrange(length): result+=string[lista[z]] lista[x]=0 x-=1 elif x==length-1: for z in xrange(length): result+=string[lista[z]] lista[x]+=1 else: for z in xrange(length): result+=string[lista[z]] lista[x]+=1 if x>0: x+=1 else: x=length-1 #Escribiendo en el fichero print result file1.write(result+"\n") toc = time.clock() ttn = toc - tic print ("Finalizado en "+str(ttn)+" segundos."); print ("Revisa "+str(name)+" en tu directorio."); #v2.0
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
¿has visto que el script tiene mezclado python 2.x y 3.x? ¿cómo lo ejecutás? tenés las funciones de la barra en un módulo de clase, pues crea una instancia y después llamas a los atributos o funciones que necesitas.
|
|
|
En línea
|
|
|
|
aalleexx
Desconectado
Mensajes: 6
|
Pero como lo harías tu? Sigue sin salirme, lo ejecuto con 2.7 y me funciona todo
|
|
« Última modificación: 10 Diciembre 2015, 16:15 pm por aalleexx »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda! Ordenador peta con barras negras y grises en monitor
Hardware
|
Jnex
|
2
|
2,476
|
5 Noviembre 2012, 18:17 pm
por Jnex
|
|
|
Barras de progreso en KDE
GNU/Linux
|
genomma
|
2
|
2,866
|
25 Marzo 2013, 19:15 pm
por genomma
|
|
|
[AYUDA][PYTHON] como se usa la libreria WAVE en python?
Scripting
|
Noxware
|
2
|
3,708
|
5 Mayo 2014, 09:03 am
por Intrus0
|
|
|
[AYUDA][PYTHON] Necesito ayuda con el metodo SEARCH del modulo RE de python
Scripting
|
Noxware
|
2
|
4,358
|
24 Mayo 2014, 16:11 pm
por Noxware
|
|
|
[AYUDA][PYTHON] Leer y guardar archivos .exe de forma hexadecimal en python???
Scripting
|
Noxware
|
3
|
5,817
|
22 Agosto 2014, 09:33 am
por Eleкtro
|
|