python 实现百度网盘非会员上传超过500个文件的方法
作者:武散人 发布时间:2021-01-31 19:45:37
标签:python,百度网盘,上传文件
案例故事:
百度网盘非会员大量上传文件,会弹出:“上传文件数量超出500个现在,开通超级会员后可继续上传”,其实是限制拖入500张相片,并非限制上传500张。
非会员如何将众多文件,分割成500一个的文件夹,不受拖入数量限制呢?
准备阶段
os.walk()函数,可以树形遍历整个路径下的文件夹列表和文件列表
Path(路径).parent属性,可以获取该“路径”的父路径
os.path.relpath("D:\aaa\bbb\ccc",start="D:\aaa")函数,可以返回“bbb\ccc”字符串, 实现路径裁剪。
os.sep 可以代表任何路径分隔符
os.rename()函数,可以实现移动功能
sys.argv[1] 通过接收“待分割的路径”参数的输入
Python面向对象类形式
# python3.8
# coding=utf-8
import os
import sys
from pathlib import Path
class BaiduPanCutter(object):
'''百度网盘500个文件分割器'''
def __init__(self, root_path, count=500):
self.root_path = root_path
self.count = count
self.folder_file_dict = {} # 文件夹与其文件列表的映射字典
self.get_folders_files() # 获取该根路径下的所有文件夹列表和文件列表
def get_folders_files(self):
'''获取该根路径下的所有文件夹列表和文件列表'''
for folders, _, files in os.walk(self.root_path):
self.folder_file_dict[folders] = files
def _split(self, arr, count):
'''分割文件列表,每500算一份'''
arrs = []
while len(arr) > count:
piece = arr[:count]
arrs.append(piece)
arr = arr[count:]
arrs.append(arr)
return arrs
# 分割文件并放到新的文件去
def cut_file(self):
'''分割并移动到新的文件夹'''
for each_folder in self.folder_file_dict.keys():
num = 1 # 以500为倍数,这是1倍
# 将文件路径(摒弃当前路径)转成字符串,用_隔开
temp_path = os.path.relpath(each_folder, Path(self.root_path).parent)
temp_path = temp_path.replace(os.sep, "_")
print(temp_path)
files_list = self.folder_file_dict[each_folder]
file_group = self._split(files_list, self.count) # 按500来分割
if len(file_group) > 1: # 有超过500个的文件列表
for each_group in file_group: # 遍历每500份的文件列表
new_folder = os.path.join(self.root_path, temp_path + "_" + str(num)) # 新路径
if not os.path.exists(new_folder):
os.mkdir(new_folder)
for each_file in each_group:
old_file = os.path.join(each_folder, each_file)
new_file = os.path.join(new_folder, each_file)
print("正在将%s 移动到 %s" % (old_file, new_file))
os.rename(old_file, new_file)
num = num + 1
else: # 无超过500个的文件列表
new_folder = os.path.join(self.root_path, temp_path) # 新路径
if not os.path.exists(new_folder):
os.mkdir(new_folder)
for each_file in file_group[0]: #
old_file = os.path.join(each_folder, each_file)
new_file = os.path.join(new_folder, each_file)
print("正在将%s 移动到 %s" % (old_file, new_file))
os.rename(old_file, new_file)
if __name__ == '__main__':
try:
arg1 = sys.argv[1]
if os.path.isdir(arg1):
b_obj = BaiduPanCutter(arg1, 500)
b_obj.cut_file()
else:
print("非文件夹,运行方法:python %s 路径文件夹" % sys.argv[0])
except IndexError:
print("未输入待分割的路径文件夹, 运行方法:python %s 路径文件夹" % sys.argv[0])
os.system("pause")
运行方式与效果
运行方式:将以上代码命名为:baidu_pan_500_cutter.py
通过命令:python baidu_pan_500_cutter.py D:\DCIM\Photos 运行
每个文件夹都不会超过500个文件,后续将一个一个的文件夹拖入百度网盘(电脑客户端)即可了。
备注信息
本脚本不涉及任何的删除文件或文件夹的操作,不会出现文件丢失情况。
兼容非英文的文件夹或文件分割操作。
来源:https://www.zipython.com/#/detail?id=c6156f71199346f4a10ea5ccbe6aa0b6
0
投稿
猜你喜欢
- 在软件开发过程中经常会遇到数据库升迁的问题,原因比较多,如acsess访问速度比sql server慢、删除数据记录后access会留下空档
- ThinkPHP3.1.3版本有一些特性,还是值得关注的,下面来简单说下。1、异常方面的改进新版的ThinkPHP3.1.3重写了异常类Th
- // 和PHP一样的时间戳格式化函数// @param {string} format 格式
- 阅读目录什么是设计模式单体模式:工厂模式:单例模式观察者模式(发布订阅模式)策略模式模板模式代理模式外观模式设计模式太多了,貌似有23种,其
- ASP的强大不仅仅局限于接受和显示的交互,更多的是运用ActiveX 组件进行更强大的Web应用。那究竟ActiveX组件为何物?
- 一个表单焦点效果javascript函数,可以用在美化表单界面,挺好看的。function validForms(){  
- 实例如下:/** * 将数值四舍五入后格式化. * * @pa
- 情感分析(sentiment analysis)是2018年公布的计算机科学技术名词。它可以根据文本内容判断出所代表的含义是积极的还是负面的
- 格式化字符串是什么?Python字符串的格式化处理主要是用来将变量(对象)的值填充到字符串中,在字符串中解析Python表达式,对字符串进行
- Haar特征哈尔特征使用检测窗口中指定位置的相邻矩形,计算每一个矩形的像素和并取其差值。然后用这些差值来对图像的子区域进行分类。haar特征
- 安装模块下面需要用模块,先安装一下:pip install numpy pip install opencv-python==4.5.5.6
- tf.nn.conv2d与tf.layers.conv2d的区别在写CNN中注意到tensorflow目前有tf.nn.conv2d和tf.
- 本文实例讲述了Python实现的序列化和反序列化二叉树算法。分享给大家供大家参考,具体如下:题目描述请实现两个函数,分别用来序列化和反序列化
- 首先来分析下需求,web程序后台需要认证,后台页面包含多个页面,最普通的方法就是为每个url添加认证,但是这样就需要每个每个绑定url的后台
- 安装pillow(python的图形界面库)第一种方法在Dos界面输入pip install pillow(但是不知为何总是失败);搞了好几
- Python 是一种功能强大的语言,广泛用于自动执行各种任务。无论您是开发人员、系统管理员,还是只是想通过自动化日常任务来节省时间的人,Py
- 具体代码如下所示:<?php//在子类或类内部用“::”调用本类或父类时,不是静态调用方法,而是范围解析操作符。class Paren
- URL完全匹配(具体的url)/indexURL模糊匹配(你根本就不知道index后面是什么,它根本不会返回参数)/index/\dURL带
- 方法1: 代码如下:truncate table TableName 删除表中的所有的数据的同时,将自动增长清零。 如果有外键参考这个表,这
- 本文实例讲述了python简单程序读取串口信息的方法。分享给大家供大家参考。具体分析如下:这段代码需要调用serial模块,通过while循