简 介:蓝奏云存储文件时最大只能存储100MB的文件,但有时需要存储大于100MB的文件(如视频等)。本文给出了存储大文件的方法——分卷压缩上传。
关键词
: 蓝奏云、分卷压缩、文件存储
§01 问题背景
蓝奏云是一个比较好用的文件分享网盘,但免费版只能存储小于100MB的文件,对于大于100MB的文件便需要开通会员了。
在平时,我们很容易遇到大于100MB的文件,如视频等。对于大于100MB的文件,可以采用分卷压缩的方式上传到蓝奏云。
如果仅仅是单独分卷压缩,对于分卷的几个文件有时会无法上传,所以本文提供了一种分卷压缩再压缩的方式解决此问题。
§02 使用方法
一、压缩上传
1. 使用bandzip软件将需要压缩的文件分卷压缩,每卷的大小为25M
2. 将LanzouTrans.exe放入文件夹
3. 运行LanzouTrans.exe
4. 上传filename.xx.zip文件到蓝奏云(xx为数字)
二、下载解压
1. 将文件下载到本地
2. 将LanzouTrans.exe放入文件夹
3. 运行LanzouTrans.exe
4. 使用bandzip软件解压缩
注意:
1. 文件夹中只能有一个.zip文件(.xx.zip不算.zip文件,其中xx为数字),该zip文件即为需要压缩或解压缩的文件。
2. 文件命名时,正式文件名中不能带有.字符。
§03 应用实例
1. 压缩上传
1. 使用bandzip压缩

▲ 图1 使用bandzip压缩操作01

▲ 图2 使用bandzip压缩操作02

▲ 图3 压缩完成后文件结构
2、运行小程序
双击运行LanzouTrans.exe
。

▲ 图4 程序运行中

▲ 图5 运行结束后文件结构
3、上传文件
- 在蓝奏云中新建文件夹。
▲ 图6 在蓝奏云中新建文件夹
- 上传
▲ 图7 上传文件
- 上传完成
经过以上操作,便将《斗破苍穹三年之约 第10集.mp4》文件上传到了蓝奏云中。
2. 下载解压
。。。
※ 附录:源代码
import os
import zipfileDEBUG = 0# 压缩文件时,多少个文件一组
FILE_NUM = 4state = {0: '运行正常。',1: '所选文件不是zip文件。',2: '文件夹中没有zip文件。',3: '文件夹中的zip文件大于1个,请删除其他zip文件,只保留一个zip文件,再运行程序。',4: '文件夹中没有需要解压缩或压缩的文件。',5: '文件夹中既有需要解压缩也有需要压缩的文件,请将不相关的文件移入其他文件夹,再运行程序。'
}def print_progress_bar(now, total):LENGTH = 50print('\r', end='')print('[', end='')print('-' * int(LENGTH*now/total), end='')print('>', end='')print(' ' * (LENGTH - int((LENGTH*now/total))), end='')print(']', end='')print(' {:.2f}%'.format(now/total*100), end='')def decompress(filedir, filename, aimxxzips):if DEBUG:print('Total File Number : %d' % len(aimxxzips))for f in aimxxzips:fname = os.path.join(filedir, f)print(fname)id = 0for f in aimxxzips:zipfilename = os.path.join(filedir, f)# 判断是否为有效的zip文件if zipfile.is_zipfile(zipfilename):with zipfile.ZipFile(zipfilename, 'r') as zfile:nl = zfile.namelist()for name in nl:zfile.extract(name)oldname = os.path.join(filedir, name)newname = os.path.join(filedir, '.'.join([filename, name.split('.')[-1]]))os.rename(oldname, newname)if DEBUG:print(oldname)print(newname)id += 1print_progress_bar(id, len(aimxxzips))for f in aimxxzips: os.remove(f)def compress(filedir, filename, xxzips):if DEBUG:print('Total File Number : %d' % len(xxzips))for f in xxzips:fname = os.path.join(filedir, f)print(fname)num2str = lambda n: '0' + str(n) if n < 10 else str(n)num = 0id = 0while num * FILE_NUM < len(xxzips):num += 1f = filename + '.{}.zip'.format(num2str(num))outfile = os.path.join(filedir, f)with zipfile.ZipFile(outfile, 'w') as f:for fn in xxzips[(num-1)*FILE_NUM : num * FILE_NUM]:f.write(fn)id += 1print_progress_bar(id, len(xxzips))if DEBUG:print(outfile)print("Compress FILE into {}.".format(outfile))for f in xxzips: os.remove(f)def main():dirstr = os.getcwd()iszip = lambda s: len(s.split('.')) == 2 \and s.split('.')[-1].upper() == 'ZIP'zips = [s for s in os.listdir(dirstr) if iszip(s) == 1]if len(zips) == 0: return 2if len(zips) > 1: return 3filename = zips[0]filepath = os.path.join(dirstr, filename)iszip = lambda s: s.split('.')[-1].upper() == 'ZIP'if iszip(filepath) == 0: return 1filepathlst = filepath.split('\\')filedir = "\\".join(filepathlst[:-1])filename = filepathlst[-1][:-4]isxxzip = lambda s: len(s.split('.')) >= 2 \and s.split('.')[-1][0].upper() == 'Z' \and s.split('.')[-1][1:].isdigit() \and s.split('.')[-2] == filenamexxzips = [s for s in os.listdir(filedir) if isxxzip(s) == 1]isaimxxzip = lambda s: len(s.split('.')) >= 3 \and s.split('.')[-1].upper() == 'ZIP' \and s.split('.')[-2].isdigit() \and s.split('.')[-3] == filenameaimxxzips = [s for s in os.listdir(filedir) if isaimxxzip(s) == 1]if len(xxzips) == 0 and len(aimxxzips) == 0: return 4if len(xxzips) > 0 and len(aimxxzips) > 0: return 5if len(xxzips) == 0 and len(aimxxzips) > 0:print('正在解压缩......')decompress(filedir, filename, aimxxzips)elif len(aimxxzips) == 0 and len(xxzips) > 0:print('正在压缩......')compress(filedir, filename, xxzips)return 0s = main()
if s != 0:print(state[s])input("按任意键退出......")
LanzouTrans.exe
文件下载地址:
- 蓝奏云:https://wwi.lanzouy.com/i4bjPy3mdcj
- 百度网盘:https://pan.baidu.com/s/1txT9e0A__ecOQfuW1fy4gg?pwd=7vr8
- 阿里云盘:https://www.aliyundrive.com/s/Q3oy614L27C