linux 通过python的bypy包连接百度网盘下载上传文件

2020/11 24 01:11

bypy list # 显示文档

bypy upload filename -v # 上传某文件,显示进度

bypy -c # 取消令牌文件。一段时间后要重新授权

bypy downdir filename # 下载

bypy compare # 比较本地目录和网盘目录

bypy upload #将当前目录下的所有文件同步到百度网盘中

bypy downdir #将百度云上的内容同步到本地

 

一、bypy 如何从百度云网盘下载文件

1、安装pypy

[root@ansible-server ~] # pip install bypy

2、输入bypy info 进行认证

复制这代代码在浏览器中打开

 

然后复制授权码--->再按回车。

3、需要在百度网盘上面,复制到bypy文件夹中。

我的应用数据--->bypy--->需要下载的文件 (备注:把你要下载的文件,先放到bypy文件夹中,就可以下载。)

 

4、下载文件

[root@ansible-server ~] # bypy list
/apps/bypy ($t $f $s $m $d):
F docker-k8s-devops-master.zip 2265427 2019-05-30, 16:34:55 5346064f4bd85c934af37b91551f8b6c
#下载文件
[root@ansible-server ~] # bypy downfile docker-k8s-devops-master.zip
#查看文件
[root@ansible-server ~] # ll
-rw-r--r--. 1 root root   2265427 May 30 16:36 docker-k8s-devops-master.zip

5、上传文件

#需要上传的文件
[root@ansible-server ~] # ll
-rw-r--r--. 1 root root   8507412 Apr 23  2017 wordpress-4.7.4-zh_CN.tar.gz
#上传文件
[root@ansible-server ~] # bypy upload wordpress-4.7.4-zh_CN.tar.gz

查看结果:

刷新一下百度网盘页面

 

6、通过程序上传文件

[root@ansible-server ~] # pip3 install bypy

[root@ansible-server ~] # ll
total 511684
-rw-r--r--. 1 root root 3167 May 30 17:06 bypy_upload_file.py

#上传代码,具于Python3编写的。

[root@ansible-server ~] # cat bypy_upload_file.py

from bypy import ByPy
import os
import time
import datetime
import threading
# 百度云存放文件的文件夹名
dir_name = "ByPy-test"
# 获取一个bypy对象,封装了所有百度云文件操作的方法
bp = ByPy()
# 百度网盘创建远程文件夹bypy-test
bp.mkdir(remotepath = dir_name)
# 函数作用:文件中的 \ 改为 /
# 函数输入:文件绝对路径
# 输出:文件绝对路径添加转义符后的结果
def changePath(filePath):
    path = ""
    for i in range(len(filePath)):
        if filePath[i] !="\\":
            path += filePath[i]
        else:
             path += "/"
    return path
# 根据当前路径和文件夹路径得到相对路径
def relPath(filePath, topDir):
    relativepath = ""
    for i in range(len(filePath)):
        if i < len(topDir) and filePath[i] == topDir[i] :
            continue
        relativepath += filePath[i]
    #print ("相对路径" + relativepath)
    return relativepath
# 函数作用:给出文件夹,得到所有文件的绝对路径
# 输入参数:当前文件夹的绝对路径
# 返回值:一个包含所有文件绝对路径,以及文件所在文件夹的大小的列表
def getFileList(file_dir):
    fileList = []
    top_dir = ""
    checkFlag = False
    for root, dirs, files in os.walk(file_dir):
        #print(root) #当前目录路径
        if checkFlag == False:
            top_dir = root
            checkFlag = True
        #print(dirs) #当前路径下所有子目录
        #print(files) #当前路径下所有非目录子文件
        for file in files:
            fileDict = dict(Path = changePath(relPath(root, top_dir)), fileName = file, createFlag = False)
            fileList.append(fileDict) # 当前目录+文件名
            #print(fileDict)
    return fileList
#获取文件的大小,结果保留两位小数,单位为MB
def get_FileSize(filePath):
    fsize = os.path.getsize(filePath)
    fsize = fsize/float(1024*1024)
    return round(fsize,2)
# 获取文件绝对路径列表
allFiles = getFileList(os.path.abspath('.'))
totalFileSize = 0  # 文件大小变量
start = datetime.datetime.now()   # 计时开始
# 逐个上传
createFlag = {}
for file in allFiles:
    #bp.upload(localpath=file, remotepath=dir_name, ondup='newcopy')
    print("正在上传文件:" + file["fileName"])
    if file["Path"] != "":
        bp.mkdir(remotepath = dir_name + file["Path"])
        DIR_NAME = dir_name +  file["Path"]
        bp.upload(localpath= "." + file["Path"]+ "/" +file["fileName"], remotepath = str(DIR_NAME), ondup='newcopy')
        print ("文件发送完成:本地路径:" file["Path"]+"/" +file["fileName"] + " 远程文件夹:" + DIR_NAME)
        totalFileSize += get_FileSize( "." + file["Path"]+ "/" +file["fileName"])
    else:
        bp.upload(localpath= file["fileName"], remotepath= dir_name, ondup='newcopy')
        print ("文件发送完成:" + file["fileName"] + " 远程文件夹:" + dir_name)
        totalFileSize += get_FileSize( "." + file["Path"]+ "/" +file["fileName"])
    print ("------------------------------------")
end = datetime.datetime.now()  # 计时结束
print("上传文件总大小为" + str(totalFileSize) + "MB")
print("花费时间(s):" + str((end - start).seconds))
print("\nupload ok")

#授权并运行

[root@ansible-server ~] # chmod +x bypy_upload_file.py

[root@ansible-server ~] # python3 bypy_upload_file.py

 

--转载请注明: http://91o.cc/linux-%e9%80%9a%e8%bf%87python%e7%9a%84bypy%e5%8c%85%e8%bf%9e%e6%8e%a5%e7%99%be%e5%ba%a6%e7%bd%91%e7%9b%98%e4%b8%8b%e8%bd%bd%e4%b8%8a%e4%bc%a0%e6%96%87%e4%bb%b6/