try.py
进口uos
dir = 16384
def walk(t):#递归函数
print('-',t)w = uos.ilistdir(t)for x in w: L = list(x) print(L[0], L[1], L[3]) if L[1] == dir: walk(L[0]) else: returnZ= uos.ilistdir()
X in z:
L = list(x)print(L[0], L[1], L[3])if L[1] == dir: walk(L[0])代码以第7行中的一个错误结束,并有一个错误:
输出:
Traverse.py 32768 773
boot.py 32768 139
利比16384 0
-lib
一16384 0
-one
回溯(最近一次调用):
文件"stdin",第21行
文件"stdi>",第12行,步行
文件"
OSError: Errno 2 ENOENT
目录结构是:
库
one
two
three
three.py
boot.py
main.py
one.py
Traverse.py
似乎停在一个没有文件的目录上,
发布于 2021-09-09 11:48:54
没有ESP测试,但这里有一些问题:
如果条目是一个文件,则不应该返回
walk('two'),但是没有这样的目录,必须是此外:
list
ilistdir也会返回可以索引的tuple,因此不需要将其转换为将集合直接传递给print的tuple,也不需要单独的ilistdir。修改,完全路径的打印略有不同,因此更容易理解:
import uos
dir_code = 16384
def walk(t):
print('-', t)
for x in uos.ilistdir(t):
print(x)
if x[1] == dir_code and x[0] != '.' and x[0] != '..':
walk(t + '/' + x[0])
walk('.')这仍然将打印两次目录,添加所有的索引使事情难以阅读。使用元组解压缩和打印目录进行一次调整:
import uos
dir_code = 16384
def walk(top):
print(top)
for name, code, _ in uos.ilistdir(top):
if code != dir_code:
print(top + '/' + name)
elif name not in ('.', '..'):
walk(top + '/' + name)
walk('.')https://stackoverflow.com/questions/69062559
复制相似问题