2016-04-21 1 views
1

Я пытаюсь подсчитать количество файлов в каталоге, в котором я сохраняю свои отчеты. Если количество файлов не равно X + 1, я хотел бы повторно запустить среднюю часть кода, загружающего отчет. Я должен использовать этот метод, потому что я имею дело с CSV-файлами, и они загружаются в последовательном порядке (Report (1), Report (2), ect.). Затем я меняю имена этих отчетов на настоящие имена позже в коде.Python: если подсчитано количество файлов не равно x, то повторите попытку отчета

import time 
import os 
import os.path 
import glob 
import shutil 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.common.exceptions import MoveTargetOutOfBoundsException 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import NoAlertPresentException 

files = glob.glob('/Users/me/Desktop/AUTOREPORTS/*') 
for f in files: 
    os.remove(f)   

open('/Users/me/Desktop/AUTOREPORTS/report.csv', "w") 

for x in range(1, 73):  
    while True:  
     try: 
      fp = webdriver.FirefoxProfile('C:/Users/me/Documents/FirefoxProfile') 
      browser = webdriver.Firefox(fp) 
      browser.get('https://website.com/') 

      time.sleep(8) 

      browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").clear() 
      browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").send_keys("USER") 
      browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").clear() 
      browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").send_keys("PWD") 
      browser.find_element_by_id("ctl00_PlaceHolderMain_login_login").click() 

#gets user to reporting front end 

      ReportMgr= browser.find_element_by_partial_link_text('Report Manager') 
      ReportMgr.click() 

      time.sleep(5) 

      CustomReport= browser.find_element_by_partial_link_text('Custom Report') 
      CustomReport.click() 

      time.sleep(5) 

      ProgramManagement= browser.find_element_by_partial_link_text('Program Management') 
      ProgramManagement.click() 
      ProgramManagement= browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_LEFT) 

#pulls reports 

      browser.find_element_by_partial_link_text('Program Management').click() 
      time.sleep(60) 
      browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_DOWN * x, Keys.ENTER) 
      time.sleep(60) 
      try: 
       browser.find_element_by_css_selector("#ctl00_PlaceHolderMain_ReportViewer1_HtmlOutputReportResults2_updateFilters_TitleAnchor").click()    
      except NoSuchElementException: 
       pass   
      time.sleep(140)    
      browser.find_element_by_css_selector("#ctl00_PlaceHolderMain_ReportViewer1_HtmlOutputReportResults2_CSVButton_ImageAnchor > img").click() 
      time.sleep(140)    
      fname = "Report(%s).csv" % (x) 
      os.chdir('/Users/me/Desktop/AUTOREPORTS') 
      browser.quit() 
      #counts number of files in DIR 
      path = 'C:/Users/me/Desktop/AUTOREPORTS' 
      count = len([f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]) 
      print count 
      #end count of number of files in DIR 
     except: 
       browser.quit()   
       continue 
     else: 
       break 

Это часть кода, где я получаю количество - однако я не уверен, что сказать Python, что если этот счетчик не равен X + 1 затем попробовать повторить (х):

#counts number of files in DIR 
       path = 'C:/Users/me/Desktop/AUTOREPORTS' 
       count = len([f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]) 
       print count 
       #end count of number of files in DIR 

ответ

1

Просто заявление if должно сделать трюк. Возможно, извлеките эту среднюю часть функции, которую вы можете вызвать. Таким образом, вам не нужно переписывать весь этот код внутри оператора if.

if count != x + 1: 
    # Do what you need to download the file again 

Кроме того, вместо того, чтобы делать это в большом try/accept используйте contextlib создать функцию, которую можно использовать с with заявления. Пример:

from contextlib import contextmanager 


@contextmanager 
def quitting(thing): 
    yield thing 
    thing.close() 
    thing.quit() 

Затем откройте драйвер так:

with quitting(webdriver.Firefox(fp)) as browser: 
    # Put your code here. 

Таким образом, если есть ошибки, он будет вызывать close и quit на вашем WebDriver экземпляре.

+0

В этом проблема. Я не знаю, что делать :(Я думаю, что это может быть, если count == x + 1: # равно print count elif count! = Count + 1: # не равно x - 1 продолжить – Yogwhatup

+0

@Yogwhatup , Извлеките среднюю часть, которую вам нужно переустановить в функцию. Затем вызовите функцию, если вам нужно повторно загрузить отчет. – DuckPuncher

+0

Это привело меня туда, где мне нужно было - очень благодарен! – Yogwhatup

Смежные вопросы