小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

《自拍教程78》Python 百度網(wǎng)盤500個(gè)文件分割

 路人甲Java 2021-05-28
案例故事

百度網(wǎng)盤非會(huì)員大量上傳文件,會(huì)彈出:“上傳文件數(shù)量超出500個(gè)限制,開(kāi)通超級(jí)會(huì)員后可繼續(xù)上傳”,
其實(shí)是限制拖入500張相片,并非限制上傳500張。

非會(huì)員如何將眾多文件,分割成500一個(gè)的文件夾,不受拖入數(shù)量限制呢?

準(zhǔn)備階段
  1. os.walk()函數(shù),可以樹(shù)形遍歷整個(gè)路徑下的文件夾列表和文件列表

  2. Path(路徑).parent屬性,可以獲取該“路徑”的父路徑

  3. os.path.relpath("D:\aaa\bbb\ccc",start="D:\aaa")函數(shù),可以返回“bbb\ccc”字符串, 實(shí)現(xiàn)路徑裁剪。

  4. os.sep 可以代表任何路徑分隔符

  5. os.rename()函數(shù),可以實(shí)現(xiàn)移動(dòng)功能

  6. sys.argv[1] 通過(guò)接收“待分割的路徑”參數(shù)的輸入

Python面向?qū)ο箢愋问?/h5>
# python3.8
# coding=utf-8

import os
import sys
from pathlib import Path


class BaiduPanCutter(object):
    '''百度網(wǎng)盤500個(gè)文件分割器'''

    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):
        '''分割并移動(dòng)到新的文件夾'''
        for each_folder in self.folder_file_dict.keys():
            num = 1  # 以500為倍數(shù),這是1倍

            # 將文件路徑(摒棄當(dāng)前路徑)轉(zhuǎn)成字符串,用_隔開(kāi)
            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來(lái)分割

            if len(file_group) > 1:  # 有超過(guò)500個(gè)的文件列表
                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 移動(dòng)到 %s" % (old_file, new_file))
                        os.rename(old_file, new_file)
                    num = num + 1
            else:  # 無(wú)超過(guò)500個(gè)的文件列表
                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 移動(dòng)到 %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("非文件夾,運(yùn)行方法:python %s 路徑文件夾" % sys.argv[0])
    except IndexError:
        print("未輸入待分割的路徑文件夾, 運(yùn)行方法:python %s 路徑文件夾" % sys.argv[0])
    os.system("pause")

運(yùn)行方式與效果

運(yùn)行方式:將以上代碼命名為:baidu_pan_500_cutter.py
通過(guò)命令:python baidu_pan_500_cutter.py D:\DCIM\Photos 運(yùn)行

每個(gè)文件夾都不會(huì)超過(guò)500個(gè)文件,后續(xù)將一個(gè)一個(gè)的文件夾拖入百度網(wǎng)盤(電腦客戶端)即可了。

備注信息
  1. 本腳本不涉及任何的刪除文件或文件夾的操作,不會(huì)出現(xiàn)文件丟失情況。

  2. 兼容非英文的文件夾或文件分割操作。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多