Skip to main content

Python My Tree

· 2 min read
import os


def my_pwd_v3(path, recurs=True, rt_folder=True, rt_file=True, tree=True, mark=False):
'''
path: 路徑
recurs: 遞迴T / 本層F
rt_folder: 顯示資料夾T / 不顯示F
rt_file: 顯示檔案T / 不顯示F
tree: 樹狀圖顯示T / 不顯示F
mark: 不顯示檔案或資料夾F / 顯示:T
'''
# setting
dlen = 4
dash, sp = '─',
##############################
st_c = '├' + dash * dlen + sp
st_n = '│' + ' ' * dlen + sp

st_l = '└' + dash * dlen + sp
st_s = ' ' + ' ' * dlen + sp
##############################
folders, files, fail = [], [], []
view = []
fstr = os.path.basename((path))
view.append(fstr)

def my_pwd_child(path, st=''):
try:
for f in os.listdir(path):
if f != os.listdir(path)[-1]:
shtr = st + st_c
past = st + st_n
else:
shtr = st + st_l
past = st + st_s

full_path = os.path.join(path, f)
fstr = os.path.basename(f)

if os.path.isdir(full_path) and rt_folder:
folders.append(full_path)
fstr = fstr + ' (dir)' if mark else fstr
t = shtr + fstr
view.append(t)
if recurs:
my_pwd_child(full_path, past)
elif os.path.isfile(full_path) and rt_file:
files.append(full_path)
fstr = fstr + ' (file)' if mark else fstr
t = shtr + fstr
view.append(t)
except:
fail.append('無法讀取 ' + path)

my_pwd_child(path)

if tree:
return view + fail
else:
return folders + files + fail


def main():
pwd = r'D:\d0'
k = my_pwd_v3(pwd, recurs=True, rt_folder=True,
rt_file=True, tree=True, mark=False)
for _ in k:
pass
print(_)

# help(my_pwd_v3)
# print(my_pwd_v3.__doc__)


if __name__ == '__main__':
main()
[Running]
d0
└──── d1
├──── d1
│ ├──── d1
│ │ ├──── f1.txt
│ │ └──── f2.txt
│ ├──── f1.txt
│ └──── f2.txt
└──── d2
[Done] exited with code=0 in 0.331 seconds