python - 一个结构化显示文件的脚本,迭代是否有问题?
本文介绍了python - 一个结构化显示文件的脚本,迭代是否有问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
最近在学python,写了一个小脚本,基本功能就是遍历显示指定路径下的所有文件夹、文件,根据层级在显示内容前面加"--"。
但是不管怎么样,输出只有第一层的所有文件和文件夹,仔细的审查了好几遍代码,就是找不出原因在哪,求大神告知问题所在,以下是代码内容:
import os
rootpath = input("请输入目录:")
catedir = os.listdir(rootpath)
def prt_dir_files(catedir, is_indent=True, level=0):
print(rootpath)
for each_item in catedir:
if os.path.isdir(each_item):
print(each_item)
prt_dir_files(os.listdir(each_item), is_indent, level+1)
else:
if is_indent:
print("--" * level, end="")
print(each_item)
prt_dir_files(catedir)
解决方案
關鍵的問題出在, 路徑不對, listdir
拿到的只是目錄底下的 文件名, 而不是 文件的路徑。
所以必須要使用 os.path.join
來製造出完整的路徑。
根據以上說明我改了一下你的代碼:
import os
def prt_dir(path, indent_symbol='', level=0):
print(indent_symbol*level, os.path.basename(path))
if os.path.isdir(path):
for f in os.listdir(path):
fpath = os.path.join(path, f)
prt_dir(fpath, indent_symbol, level+1)
if __name__ == '__main__':
rootpath = input("请输入目录:")
prt_dir(rootpath, '--', 0)
使用 os.walk
也是個不錯的主意, 以下範例:
import os
def prt_dir(rootpath, symbol=''):
for root, dirs, files in os.walk(rootpath):
path = root.split('/')
print((len(path) - 1) * symbol, os.path.basename(root))
for file in files:
print(len(path) * symbol, file)
if __name__ == '__main__':
rootpath = input("请输入目录:")
prt_dir(rootpath, '--')
我回答過的問題: Python-QA
这篇关于python - 一个结构化显示文件的脚本,迭代是否有问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文