ztree與python遍歷文件夾

因?yàn)樾枰獙?shí)現(xiàn)一個(gè)樹形結(jié)構(gòu)圖,需要讀取本地的某個(gè)目錄下的文件夾里面的內(nèi)容坛善,而且文件夾里面可以嵌套任意數(shù)量的文件和文件夾,需要把這個(gè)讀取出來并且顯示在網(wǎng)頁(yè)上。
找到了這個(gè)ztree插件,ztree需要文件目錄結(jié)構(gòu)的json文件季惯,所以需要將本地的文件夾遍歷生成json格式吠各,采用生成的是簡(jiǎn)單的json格式,類似于

var zNodes = [
        { id: 1, pId: 0, name: "隨意勾選 1", open: true},
        { id: 11, pId: 1, name: "隨意勾選 1-1", open: true},
        { id: 111, pId: 11, name: "隨意勾選 1-1-1"},
        { id: 112, pId: 11, name: "隨意勾選 1-1-2"},
        { id: 12, pId: 1, name: "隨意勾選 1-2", open: true},
        { id: 121, pId: 12, name: "隨意勾選 1-2-1"},
        { id: 122, pId: 12, name: "隨意勾選 1-2-2"},
        { id: 2, pId: 0, name: "隨意勾選 2", checked: true, open: true},
        { id: 21, pId: 213, name: "隨意勾選 21-3"},
        { id: 22, pId: 2, name: "隨意勾選 2-2", open: true},
        { id: 221, pId: 22, name: "隨意勾選 2-2-1", checked: true},
        { id: 222, pId: 22, name: "隨意勾選 2-2-2"},
        { id: 23, pId: 2, name: "隨意勾選 2-3"}
    ];

python遍歷文件夾是兩種方式:

    # -*- coding: utf-8 -*- 
    import os 
    def Test1(rootDir): 
        list_dirs = os.walk(rootDir) 
        for root, dirs, files in list_dirs: 
            for d in dirs: 
                print os.path.join(root, d)      
            for f in files: 
                print os.path.join(root, f) 
    # -*- coding: utf-8 -*- 
    import os 
    def Test2(rootDir): 
        for lists in os.listdir(rootDir): 
            path = os.path.join(rootDir, lists) 
            print path 
            if os.path.isdir(path): 
                Test2(path)

第一種是先輸出當(dāng)前目錄下的所有的文件和文件夾勉抓,是一層層向下的贾漏,而第二種是每個(gè)樹遍歷完了在遍歷新的一個(gè)父節(jié)點(diǎn)的,類似先序遍歷

這里選擇第一種方式加以修改藕筋,生成所需的json文件

import os
import os.path
import json

p_id = 1
p_pid = 0
jsondict = dict()
jsonlist = list()
dirpath = r"e:\tree"  # p_id=1 ,p_pid =0
jsondict = {"id": 1, "pId": 0, "path": r"e:\tree", "name": "tree"}
jsonlist.append(jsondict)


def getnumlength(fnum=0):
    numlength = 0
    while(fnum > 0):
        fnum = fnum / 10
        numlength += 1
    return numlength


def get_id_pid(root):
    for x in jsonlist:
        if x["path"] == root:
            return x["id"]


def getfile(dirpath):
    list_dirs = os.walk(dirpath)
    for root, dirs, files in list_dirs:
        fnum = 1
        global p_id
        numlength = getnumlength(fnum)
        c_pid = get_id_pid(root)
        for d in dirs:
            # c_pid = p_id

            c_id = c_pid * pow(10, numlength) + fnum
            fnum += 1
            print os.path.join(root, d), c_pid, c_id, d, root
            jsondict = {"id": c_id, "pId": c_pid,
                        "path": os.path.join(root, d), "name": d}
            jsonlist.append(jsondict)
        for f in files:
            # c_pid = p_id

            c_id = c_pid * pow(10, numlength) + fnum
            fnum += 1
            print os.path.join(root, f), c_pid, c_id, f, root
            jsondict = {"id": c_id, "pId": c_pid,
                        "path": os.path.join(root, d), "name": f}

            jsonlist.append(jsondict)

getfile(dirpath)

print json.dumps(jsonlist)

顯示效果如圖:

因?yàn)樾枰獙?shí)現(xiàn)一個(gè)樹形結(jié)構(gòu)圖纵散,需要讀取本地的某個(gè)目錄下的文件夾里面的內(nèi)容,而且文件夾里面可以嵌套任意數(shù)量的文件和文件夾念逞,需要把這個(gè)讀取出來并且顯示在網(wǎng)頁(yè)上困食。
找到了這個(gè)ztree插件,ztree需要文件目錄結(jié)構(gòu)的json文件,所以需要將本地的文件夾遍歷生成json格式翎承,采用生成的是簡(jiǎn)單的json格式硕盹,類似于

var zNodes = [
        { id: 1, pId: 0, name: "隨意勾選 1", open: true},
        { id: 11, pId: 1, name: "隨意勾選 1-1", open: true},
        { id: 111, pId: 11, name: "隨意勾選 1-1-1"},
        { id: 112, pId: 11, name: "隨意勾選 1-1-2"},
        { id: 12, pId: 1, name: "隨意勾選 1-2", open: true},
        { id: 121, pId: 12, name: "隨意勾選 1-2-1"},
        { id: 122, pId: 12, name: "隨意勾選 1-2-2"},
        { id: 2, pId: 0, name: "隨意勾選 2", checked: true, open: true},
        { id: 21, pId: 213, name: "隨意勾選 21-3"},
        { id: 22, pId: 2, name: "隨意勾選 2-2", open: true},
        { id: 221, pId: 22, name: "隨意勾選 2-2-1", checked: true},
        { id: 222, pId: 22, name: "隨意勾選 2-2-2"},
        { id: 23, pId: 2, name: "隨意勾選 2-3"}
    ];

python遍歷文件夾是兩種方式:

    # -*- coding: utf-8 -*- 
    import os 
    def Test1(rootDir): 
        list_dirs = os.walk(rootDir) 
        for root, dirs, files in list_dirs: 
            for d in dirs: 
                print os.path.join(root, d)      
            for f in files: 
                print os.path.join(root, f) 
    # -*- coding: utf-8 -*- 
    import os 
    def Test2(rootDir): 
        for lists in os.listdir(rootDir): 
            path = os.path.join(rootDir, lists) 
            print path 
            if os.path.isdir(path): 
                Test2(path)

第一種是先輸出當(dāng)前目錄下的所有的文件和文件夾,是一層層向下的叨咖,而第二種是每個(gè)樹遍歷完了在遍歷新的一個(gè)父節(jié)點(diǎn)的瘩例,類似先序遍歷

這里選擇第一種方式加以修改,生成所需的json文件

import os
import os.path
import json

p_id = 1
p_pid = 0
jsondict = dict()
jsonlist = list()
dirpath = r"e:\tree"  # p_id=1 ,p_pid =0
jsondict = {"id": 1, "pId": 0, "path": r"e:\tree", "name": "tree"}
jsonlist.append(jsondict)


def getnumlength(fnum=0):
    numlength = 0
    while(fnum > 0):
        fnum = fnum / 10
        numlength += 1
    return numlength


def get_id_pid(root):
    for x in jsonlist:
        if x["path"] == root:
            return x["id"]


def getfile(dirpath):
    list_dirs = os.walk(dirpath)
    for root, dirs, files in list_dirs:
        fnum = 1
        global p_id
        numlength = getnumlength(fnum)
        c_pid = get_id_pid(root)
        for d in dirs:
            # c_pid = p_id

            c_id = c_pid * pow(10, numlength) + fnum
            fnum += 1
            print os.path.join(root, d), c_pid, c_id, d, root
            jsondict = {"id": c_id, "pId": c_pid,
                        "path": os.path.join(root, d), "name": d}
            jsonlist.append(jsondict)
        for f in files:
            # c_pid = p_id

            c_id = c_pid * pow(10, numlength) + fnum
            fnum += 1
            print os.path.join(root, f), c_pid, c_id, f, root
            jsondict = {"id": c_id, "pId": c_pid,
                        "path": os.path.join(root, d), "name": f}

            jsonlist.append(jsondict)

getfile(dirpath)

print json.dumps(jsonlist)

顯示效果如圖:

ztree-checkbox.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甸各,一起剝皮案震驚了整個(gè)濱河市垛贤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌趣倾,老刑警劉巖聘惦,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異儒恋,居然都是意外死亡善绎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門诫尽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禀酱,“玉大人,你說我怎么就攤上這事牧嫉〖粮” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵酣藻,是天一觀的道長(zhǎng)曹洽。 經(jīng)常有香客問我,道長(zhǎng)辽剧,這世上最難降的妖魔是什么衣洁? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮抖仅,結(jié)果婚禮上坊夫,老公的妹妹穿的比我還像新娘砖第。我一直安慰自己,他們只是感情好环凿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布梧兼。 她就那樣靜靜地躺著,像睡著了一般智听。 火紅的嫁衣襯著肌膚如雪羽杰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天到推,我揣著相機(jī)與錄音考赛,去河邊找鬼。 笑死莉测,一個(gè)胖子當(dāng)著我的面吹牛颜骤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捣卤,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼忍抽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了董朝?” 一聲冷哼從身側(cè)響起鸠项,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎子姜,沒想到半個(gè)月后祟绊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哥捕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年牧抽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扭弧。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖记舆,靈堂內(nèi)的尸體忽然破棺而出鸽捻,到底是詐尸還是另有隱情,我是刑警寧澤泽腮,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布御蒲,位于F島的核電站,受9級(jí)特大地震影響诊赊,放射性物質(zhì)發(fā)生泄漏厚满。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一碧磅、第九天 我趴在偏房一處隱蔽的房頂上張望碘箍。 院中可真熱鬧遵馆,春花似錦、人聲如沸丰榴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)四濒。三九已至换况,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盗蟆,已是汗流浹背戈二。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喳资,地道東北人觉吭。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像骨饿,于是被迫代替她去往敵國(guó)和親亏栈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容