Python 文件下载函数优化
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
该代码使用了以下优化策略:
- 代码结构重构: 将重复代码抽取成单独的
download_file函数,减少冗余代码。 - 注释优化: 使用简洁明了的注释,方便理解代码功能。
- 代码逻辑优化: 去除不必要的循环和判断,简化代码逻辑。
这使得代码更易读、更易维护,同时提高了代码执行效率。
此外,还可以考虑以下优化点:
- 使用更精准的下载成功判断逻辑,例如根据文件大小判断是否下载完成。
- 使用多线程或异步操作来提高下载速度。
- 添加错误处理机制,避免代码异常退出。
通过这些优化,可以进一步提升代码的质量和性能。
原文地址: https://www.cveoy.top/t/topic/qhFk 著作权归作者所有。请勿转载和采集!