| 
	
		|  Autor | Tema: Ayuda con python (Barras de progreso).  (Leído 4,455 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 timeimport 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 sysimport 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 timeimport 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 sysimport 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 timeimport 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,733 |  5 Noviembre 2012, 18:17 pm por Jnex
 |  
						|   |   | Barras de progreso en KDE GNU/Linux
 | genomma | 2 | 3,099 |  25 Marzo 2013, 19:15 pm por genomma
 |  
						|   |   | [AYUDA][PYTHON] como se usa la libreria WAVE en python? Scripting
 | Noxware | 2 | 4,197 |  5 Mayo 2014, 09:03 am por Intrus0
 |  
						|   |   | [AYUDA][PYTHON] Necesito ayuda con el metodo SEARCH del modulo RE de python Scripting
 | Noxware | 2 | 5,497 |  24 Mayo 2014, 16:11 pm por Noxware
 |  
						|   |   | [AYUDA][PYTHON] Leer y guardar archivos .exe de forma hexadecimal en python??? Scripting
 | Noxware | 3 | 6,469 |  22 Agosto 2014, 09:33 am por Eleкtro
 |    |