2017年2月21日 星期二

Python 進度條心得

這也花超久的時間去了解,總之解決了。
原因是這樣的:

假設我現在有個資料夾,裡面有放數支手機資料夾,每隻手機資料夾裡面都還有好幾個不等的數據資料夾,在裡面又都各有個txt文檔。
當數量眾多時,有時在讀檔不確定是當機了還是還在處理數據,這時就會希望能夠有個進度條來顯示目前進度.
網路上很多基本的進度條code供參考,其實那也可以,但是看到jupyter notebook 有個互動式的進度條,覺得很酷,想拿來嘗試。
找到網路上有個人分享他寫的方式:


結果如以下的圖示:

由於他是寫成function,所以要套用我的狀況,就勢必要做修改。本來嘗試幾天有點想放棄,覺得其實也沒必要這樣麻煩,但又覺得不想放棄,所以終於讓我想到怎修改了(其實好像是自己腦筋差)
以下是我的改法,由於完整碼滿多的,所以只付上progress的部分,待我把我目標的code完成,會再一併放到github上分享:

# 進度條寫法:
import sys
from time import sleep
import re
def progress(No_folder,every =1, size=None):
  from ipywidgets import IntProgress, HTML, VBox
  from IPython.display import display
  progress = IntProgress(min=0, max=len(M_filefolder))
  label = HTML()
  box = VBox(children=[label, progress])
  display(box)
  try:
  for index, record in enumerate(M_filefolder, 1):
  #print ( index )   
  if index % every == 0:
  path_with_M_Lipid = path_with_phoneNumber +'/'+ M_filefolder[index-1]    
  temp = os.getcwd()    
  os.chdir( path_with_M_Lipid )
  path_forProgress = os.getcwd()
  for root, dirs, files in os.walk(path_forProgress):
  dirs
  files
  break
  method = r'.*\.txt$' # 用來確認檔案裡有txt
  count = 0
  countError = 0
  list_item =[]
  for item in os.listdir(path_forProgress): # 刪除刪除隱藏檔
  if not item.startswith('.') :
  list_item.append(item)

  for ii in range(len(list_item)): # Use len() to get how many files in folder
  filename = list_item[ii]
  #print filename
  answer = re.search(method,filename)
  if bool(answer):
  print answer.group ()
  count = count +1
  txtfile=(filename)
  if count == 0 :
  countError = countError+1
  if countError != 0:
  print 'Folder:[ '+'{}'.format(M_filefolder[index-1])+' ]'+' without txt file'   
  os.chdir(path_with_phoneNumber)
  os.chdir(path_)

  sleep(0.1) 
  progress.value = index
  label.value = '{index} / {size}'.format(
  index=index,
  size=len(M_filefolder)
  ) 

  yield record #回傳給url index為順序編號 record為物件內容
  except:
  progress.bar_style = 'danger'
  raise
  else:
  progress.bar_style = 'success'
  progress.value = index
  label.value = str(index )


這封郵件來自 Evernote。Evernote 是您專屬的工作空間,免費下載 Evernote

0 意見:

張貼留言

Contact

Get in touch with me


Adress/Street

12 Street West Victoria 1234 Australia

Phone number

+(12) 3456 789

Website

www.johnsmith.com