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


猜你喜欢
- substr(string,start,length)参数:1,string 即你要截取的字符串2,start 即要截取的开始位置(0表示从
- 本文实例讲述了JS实现选择TextArea内文本的方法。分享给大家供大家参考。具体实现方法如下:<script type="
- 一、StreamVR问题:1.运行项目时不显示手柄控制器:出现这种情况一般会在头显中提示不能加载按键配置文件,出现这种提示时请直接打开ste
- 功能描述:1)使用tkinter设计程序界面;2)调用Windows API函数实现录音机和音乐播放器。参考代码:运行界面:总结以上所述是小
- 今天早上早些时候,在我的Planet Python源中,我读到了一篇有趣的文章"开发CARDIAC:纸板计算机(Developin
- 一、URL的概念统一资源定位符(或称统一资源 * /定位地址、URL地址等,英语:Uniform Resource Locator,常缩写为
- 一、前言在程序中,有很多高效率的字符串处理方式,如果开发者能够完全掌握这些高效的字符串处理,往往在开发者也能事半功倍。比如针对于字符串的处理
- 楔子在 Python3.6 之前,格式化字符串一般会使用百分号占位符或者 format 函数,举个例子:name = &
- 对于软件来说,每一个新版本的推出都应该是一种进步,不可否认,阿里旺旺2008版相较于之前的版本的确是有很多的进步,但进步的同时却也有着比之前
- 最近在用python处理Excel表格是遇到了一些问题1, xlwt最多只能写入65536行数据, 所以在处理大批量数据的时候没法使用2,
- 机器学习之随机森林,供大家参考,具体内容如下1、Bootstraping(自助法)  
- 本文实例讲述了Python使用sort和class实现的多级排序功能。分享给大家供大家参考,具体如下:# -*- coding:utf-8
- 读文件打开文件(文件需要存在)#打开文件f = open("data.txt","r")  
- 第1步:打开Navicat,双击打开你要导出表结构的数据库,点击“查询”—&am
- 如下所示:matplotlib.pyplot.plot(*args, **kwargs)绘制线条或标记的轴。参数是一个可变长度参数,允许多个
- 在工作中,作为一名开发者的你,也许偶尔需要从事维护数据库的工作。下面我们来介绍一下两个SQL服务器的维护技巧:轻松改变数据库拥有者、整理索引
- 如何截取字符函数在工作中我们经常会遇到某种情况需要截取字符串中某个特定标签之间的内容(爬虫可能用到的较多),适用于很多情况例如字符串形式的x
- 本文实例讲述了Python使用django获取用户IP地址的方法。分享给大家供大家参考。具体如下:函数实现:def get_client_i
- 前言本文将由浅入深详细介绍yield以及generator,包括以下内容:什么generator,生成generator的方法,genera
- 修改密码://选择数据库use mysql;//修改密码update user set password=password('新密码