使用python完成下载资源到本地的操作
效果展示
code
- 主模块
# -*- coding: utf-8 -*-
import downLoad#下载模块
import fileUtils#文件模块
rootPath = "https://domainName/download/"#资源链接-资源名
fileName = "tank.apk"#文件名
dst = "/Users/vscodeWork/python/"#本地需要存的文件路径
def solve_files():
fileUtils.mkdirs(fileUtils.filedir(dst+fileName))
if fileUtils.exists(dst+fileName):
fileUtils.deleteFile(dst+fileName)
try:
downLoad.downloadFile(rootPath+fileName,dst)
except Exception as e:
print(str(e))
def main():
solve_files()
main()
- 资源下载模块
# -*- coding: utf-8 -*-
# pip安装 - 安装requests模块
# sudo python3 -m pip install --upgrade pip
# sudo pip3 install requests
import os
import sys
try:
import requests
except Exception as e:
print('引用[requests]库错误,请依次执行如下命令安装:')
print('sudo python3 -m pip install --upgrade pip')
print('sudo pip3 install requests')
sys.exit(1)
import fileUtils
def get(url, params=None, headers=None):
# headers = {'applicationkey': 'cc-admin'}
# r = requests.get(url, headers=headers, params=params)
r = requests.get(url, headers=headers, params=params)
if int(r.status_code) == 200:
return r.content
else:
raise Exception("请求接口(GET)错误码:" + str(r.status_code) + " " + url)
def post(url, params=None):
r = requests.post(url, data=params)
if r.status_code == 2010:
return r.content
else:
raise Exception("请求接口(POST)错误码:" + str(r.status_code) + " " + url)
def downloadFile(url, dstDirectory=None, dstFile=None):
r = requests.get(url)
if r.status_code == 200:
if dstFile == None:
dstFile = dstDirectory + os.path.sep + \
fileUtils.filebasename(url)
dstFile = os.path.abspath(dstFile)
# print("dstFile:" + dstFile)
stream = open(dstFile, 'wb')
stream.write(r.content)
stream.close()
else:
raise Exception("下载文件错误码:" + str(r.status_code) + " " + url)
- 文件IO模块
# coding=utf-8
import os
import io
import time
import codecs
import shutil
import hashlib
def mkdirs(path):
if not os.path.exists(path):
os.makedirs(path)
def rename(src, dst):
if not os.path.exists(src):
return
ddirname = os.path.dirname(dst)
if not os.path.exists(ddirname):
os.makedirs(ddirname)
os.rename(src, dst)
def copyFile(src, dst):
dirname = os.path.dirname(dst)
if not os.path.exists(dirname):
os.makedirs(dirname)
shutil.copy(src, dst)
def copyDirectory(src, dst):
if not os.path.exists(dst):
os.makedirs(dst)
if os.path.exists(src):
for root, _, files in os.walk(src):
for file in files:
src_file = os.path.join(root, file)
dst_file = os.path.join(dst, os.path.relpath(src_file, src))
copyFile(src_file, dst_file)
def recursiveDirectory(path, includeFunc=None):
listFile = []
if not os.path.exists(path):
return
for root, _, files in os.walk(path):
for file in files:
filepath = os.path.join(root, file)
if includeFunc == None or includeFunc(filepath):
listFile.append(filepath)
# print "file:", os.path.join(root, file)
return listFile
def deleteFile(filename):
try:
os.remove(filename)
return True
except Exception as e:
print(e)
return False
def deleteDirectory(path):
for root, directories, files in os.walk(path, topdown=False):
for file in files:
os.remove(os.path.join(root, file))
for directory in directories:
os.rmdir(os.path.join(root, directory))
if os.path.isdir(path):
os.rmdir(path)
def readFile(filename):
if not os.path.exists(filename):
return
file = open(filename, "r")
content = file.read()
file.close()
return content
def saveFile(filename, content):
try:
file = open(filename, 'w+')
file.write(content)
file.close()
except Exception as e:
raise Exception("写文件失败:" + filename + "\t" + str(e))
def exists(filename):
return os.path.exists(filename)
def readFileWithUTF8(filename):
if not os.path.exists(filename):
return
file = open(filename, "rb")
content = file.read().decode('utf-8')
file.close()
return content
def readFileWithGBK(filename):
if not os.path.exists(filename):
return
file = io.open(filename, "r", encoding='gbk')
content = file.read()
file.close()
return content
def writeFile(filename, content):
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
os.makedirs(dirname)
return
# file = open(filename, "w+", 'utf-8')
# file.write(content)
file = codecs.open(filename, "w+", 'utf-8')
file.write(content.decode('unicode_escape'))
file.close()
def writeFileUTF8(filename, content):
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
os.makedirs(dirname)
return
file = codecs.open(filename, "w+", 'utf-8')
file.write(content)
file.close()
def md5(filename):
if not os.path.exists(filename):
return
m = hashlib.md5()
with open(filename) as f:
while True:
data = f.read(4096)
if len(data) == 0:
break
m.update(data)
return m.hexdigest()
def md5WithBuffer(buffer):
m = hashlib.md5()
m.update(buffer)
return m.hexdigest()
def size(filename):
if not os.path.exists(filename):
return
return os.path.getsize(filename)
def md5Random(extra=1):
now = int(round(time.time() * 1000))
m = hashlib.md5()
m.update(str(now) + extra)
return m.hexdigest()
def now():
return int(round(time.time() * 1000))
# 文件扩展相关
# 路径分隔符:os.path.sep
# 参数:abc/aaa.json
# 返回:aaa.json
def filebasename(path):
_, file = os.path.split(path)
# basename = os.path.basename(path)
return file
# 参数:abc/aaa.json
# 返回:.json
def fileext(path):
_, ext = os.path.splitext(path)
return ext
def filedir(path):
dir, _ = os.path.split(path)
# dir = os.path.dirname(path)
return dir