def click_download_file(self, urn, path):
    '点击下载按钮,下载文件'
    downloaded_files_success = list()  # 下载成功的文件列表
    downloaded_files_failed = list()  # 下载失败的文件列表
    links = self.browser.safe_get_link(By.CSS_SELECTOR, ATTACHMENT_VIEW_WINDOW_ELEMENT)
    for link in links:
        # 获取文件名 文件大小
        file_title, download_time_limit, file_size = self.file_title_data(link, urn)
        self.download_file(link, file_title, download_time_limit, path, file_size, downloaded_files_success, downloaded_files_failed)
    
    if downloaded_files_failed:
        logger.info('
 >> 【urn = {}】下载失败文件列表:{}'.format(urn, downloaded_files_failed))
        raise FileException(message=ErrorMsg.NO_DOWNLOADABLE_FILES, file_list=downloaded_files_failed)
    if downloaded_files_success:
        logger.info('
 >> 【urn = {}】下载成功文件列表:{}'.format(urn, downloaded_files_success))
        new_file_title = self.modify_file(path, urn, downloaded_files_success)  # 下载成功修改文件名
        return new_file_title


def download_file(self, link, file_title, download_time_limit, path, file_size, downloaded_files_success, downloaded_files_failed):
    '下载文件'
    self.browser.click_with_link(link)
    self.download_alert()  # 文件下载过大
    logger.info(
        '
 >> 【urn = {}】文件名{}文件大小{},下载时间{}'.format(urn, file_title, file_size, download_time_limit))
    time.sleep(download_time_limit)  # 文件下载时间
    # 文件下载
    status = self.download_file_is_successfully(path, file_title, file_size)
    if status:
        downloaded_files_success.append(file_title)  # 下载成功
    else:
        for i in range(3):  # 下载失败 重试下载
            self.browser.click_with_link(link)
            self.download_alert()  # 重试需要点击文件下载过大
            time.sleep(download_time_limit)
            status = self.download_file_is_successfully(path, file_title, file_size)
            if status:
                downloaded_files_success.append(file_title)  # 重试成功
                logger.info('
 >> 【urn = {}】文件{}重试下载成功'.format(urn, file_title))
                break
            else:
                logger.info('
 >> 【urn = {}】文件{}重试下载失败'.format(urn, file_title))
                downloaded_files_failed.append(file_title)  # 下载失败


def download_file_is_successfully(cls, path, file_name, file_size):
    '文件是否下载成功'
    file_path = os.path.join(path, file_name)
    if os.path.exists(file_path):  # 文件存在
        return True
    return False

该代码使用了以下优化策略:

  1. 代码结构重构: 将重复代码抽取成单独的 download_file 函数,减少冗余代码。
  2. 注释优化: 使用简洁明了的注释,方便理解代码功能。
  3. 代码逻辑优化: 去除不必要的循环和判断,简化代码逻辑。

这使得代码更易读、更易维护,同时提高了代码执行效率。

此外,还可以考虑以下优化点:

  • 使用更精准的下载成功判断逻辑,例如根据文件大小判断是否下载完成。
  • 使用多线程或异步操作来提高下载速度。
  • 添加错误处理机制,避免代码异常退出。

通过这些优化,可以进一步提升代码的质量和性能。

Python 文件下载函数优化

原文地址: https://www.cveoy.top/t/topic/qhFk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录