iT邦幫忙

第 11 屆 iThome 鐵人賽

1

最後來講如何處理複雜的批量資料:
資料裡一定不只單一目錄或檔案,所以資料才可叫樹狀結構。
而透過指定目錄的套件是無法達到『尋訪』的功能的,只能把目標下看成單一物件處理


os.walk()

之前談到shutil可把指定檔案複製到指定目錄裡,但如果今天要顯示樹裡的資料 就須使用os裡的walk尋訪;使用起來直觀,且也支援多方法語句。
此套件工作模式類似結構演算法的搜尋,透過資料之間的樹狀結構建立一個遞迴的傳回值 如此反覆尋訪便可尋找符合指定方法的資料。
以dir_test目錄為例:
https://ithelp.ithome.com.tw/upload/images/20191014/20117399ONaAf6zbRW.png
現在就把此資料樹作處理~

  • os.join()

透過split可把路徑分開,而透過join就可把路徑結合起來。
以下是配合路徑的例子:

import os
a = int(input("要多少檔案?"))
for i in range(0, a):
    i += 1
    open("%d.js" % i, 'w+')
    lnk = os.path.abspath("%d.js" % i)  # 絕對路徑
    lnk_n = lnk.split("\\")[-1]
    jlnk = os.path.join("files name:" + lnk_n + "\n"+ "abs is:" + lnk)#輸出完整資訊
    print(jlnk)

回到walk,輸出資料樹

os.walk是個方法,可把它看作探照燈。所以使用它必須讓它先『驅動』

觀察os.walk的運作模式:
https://ithelp.ithome.com.tw/upload/images/20191014/20117399OXmRxumYTm.png

發現原來以『層遞』之方式尋找檔案,那就可寫成巢迴圈:

import os
for path,  dirname, filename in os.walk("dir_test"):
    print(path)
    for i in filename:
        print(os.path.join(path + i))

Ex:(os.walk做成套件使用)

import os
class stree():
    def tree_s():
        ina = input("要顯示的目錄:")
        for root, dirs, files in os.walk(ina):
            for name in files:
                print(os.path.join(root, name))
            for name in dirs:
                print(os.path.join(root, name))
        return -1  # 遞迴EOF
if __name__ == "__main__": #讓import不輸出
    stree.tree_s()

glob套件

如果要整理一堆在目錄裡之相同副檔名或類似名稱的檔案,就可使用glob。

glob.glob("要顯示的路徑檔案或方法")

form glob import *
fsA = glob("exist.py"), glob("*dir.py"), glob("*.*")
for file in fsA:
    print(file)

glob就是萬用字元的最佳應證,透過glob把" * "發揮的淋漓盡致。
https://ithelp.ithome.com.tw/upload/images/20191015/20117399YX0wQfZ9A7.png

最後的EX:(利用glob刪除子樹底下所有檔案<配合os.walk>)

import os
import glob
path_l = "15987650"
for path,  dirname, filename in os.walk(path_l):
    for i in filename:
        #print(i)
        for j in glob.glob(path+"/"+i):
                try:
                        os.remove(j)
                except:
                        pass

上一篇
[D31] pythonOS:權限和split()
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
小雨
iT邦新手 3 級 ‧ 2019-10-15 00:14:10

有時間的話可能會寫gui編寫(pyqt5)

0
阿展展展
iT邦好手 1 級 ‧ 2020-03-10 07:59:48

恭喜完賽 \0.0/

我要留言

立即登入留言