开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
3 Star 12 Fork 5

Python超人/办公自动化

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
python_oa
/
tools
/
download.py
python_oa
/
tools
/
download.py
download.py 4.81 KB
一键复制 编辑 原始数据 按行查看 历史
三月三 提交于 2023年08月11日 19:29 +08:00 . Python超人-办公自动化
from __future__ import annotations
# 用于显示进度条
# from tqdm import tqdm
from tqdm.notebook import tqdm as tqdm
# 用于发起网络请求
import requests
# import signal
#
#
# signal.signal(signal.SIGINT, multitasking.killall)
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
# 定义 1 MB 多少为 B
MB = 1024 ** 2
def split(start: int, end: int, step: int) -> list[tuple[int, int]]:
# 分多块
parts = [(start, min(start + step, end))
for start in range(0, end, step)]
return parts
def get_file_size(url: str, raise_error: bool = False) -> int:
'''
获取文件大小
Parameters
----------
url : 文件直链
raise_error : 如果无法获取文件大小,是否引发错误
Return
------
文件大小(B为单位)
如果不支持则会报错
'''
response = requests.head(url)
file_size = response.headers.get('Content-Length')
if file_size is None:
if raise_error is True:
raise ValueError('该文件不支持多线程分段下载!')
return file_size
return int(file_size)
def download_multitask(url: str, file_name: str, retry_times: int = 3, each_size=16 * MB) -> None:
# 用于多线程操作
import multitasking
# 导入 retry 库以方便进行下载出错重试
from retry import retry
'''
根据文件直链和文件名下载文件
Parameters
----------
url : 文件直链
file_name : 文件名
retry_times: 可选的,每次连接失败重试次数
Return
------
None
'''
f = open(file_name, 'wb')
file_size = get_file_size(url)
@retry(tries=retry_times)
@multitasking.task
def start_download(start: int, end: int) -> None:
'''
根据文件起止位置下载文件
Parameters
----------
start : 开始位置
end : 结束位置
'''
_headers = headers.copy()
# 分段下载的核心
_headers['Range'] = f'bytes={start}-{end}'
# 发起请求并获取响应(流式)
response = session.get(url, headers=_headers, stream=True)
# 每次读取的流式响应大小
chunk_size = 128
# 暂存已获取的响应,后续循环写入
chunks = []
for chunk in response.iter_content(chunk_size=chunk_size):
# 暂存获取的响应
chunks.append(chunk)
# 更新进度条
bar.update(chunk_size)
f.seek(start)
for chunk in chunks:
f.write(chunk)
# 释放已写入的资源
del chunks
session = requests.Session()
# 分块文件如果比文件大,就取文件大小为分块大小
each_size = min(each_size, file_size)
# 分块
parts = split(0, file_size, each_size)
print(f'分块数:{len(parts)}')
# 创建进度条
bar = tqdm(total=file_size, desc=f'下载文件:{file_name}')
for part in parts:
start, end = part
start_download(start, end)
# 等待全部线程结束
multitasking.wait_for_tasks()
f.close()
bar.close()
def download_singletask(url, file_name):
# 导入requests 库
# import requests
# 导入 tqdm
# from tqdm import tqdm, tqdm_notebook
# from tqdm.notebook import tqdm as tqdm
# 文件下载直链
# url = 'https://ffmpeg.org/releases/ffmpeg-6.0.tar.xz'
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
# # file_name = 'ffmpeg-6.0.tar.xz'
# # 发起 head 请求,即只会获取响应头部信息
# head = requests.head(url, headers=headers)
# # 文件大小,以 B 为单位
# file_size = head.headers.get('Content-Length')
# if file_size is not None:
# file_size = int(file_size)
response = requests.get(url, headers=headers, stream=True)
# 一块文件的大小
chunk_size = 1024
file_size = response.headers['content-length']
if file_size is not None:
file_size = int(file_size)
print(file_size)
bar = tqdm(total=file_size, desc=f'下载文件 {file_name}')
with open(file_name, mode='wb') as f:
# 写入分块文件
for chunk in response.iter_content(chunk_size=chunk_size):
f.write(chunk)
bar.update(chunk_size)
# 关闭进度条
bar.close()
def download(url, file_name):
# try:
# # 用于多线程操作
# import multitasking
# # 导入 retry 库以方便进行下载出错重试
# from retry import retry
#
# download_multitask(url, file_name)
# except Exception as e:
download_singletask(url, file_name)
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

Python办公自动化的课程目的,为了提高上班族工作效率,用电脑来代替人类完成繁琐、重复的工作,比如:批量处理Excel、Word、PPT,群发邮件等等
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/pythoncr/python_oa.git
git@gitee.com:pythoncr/python_oa.git
pythoncr
python_oa
办公自动化
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /