首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图使用Micropython遍历(遍历) esp32目录

试图使用Micropython遍历(遍历) esp32目录
EN

Stack Overflow用户
提问于 2021-09-05 10:32:36
回答 1查看 118关注 0票数 0
代码语言:javascript
复制

try.py

进口uos

dir = 16384

def walk(t):#递归函数

代码语言:javascript
复制
print('-',t)
代码语言:javascript
复制
w = uos.ilistdir(t)
代码语言:javascript
复制
for x in w:
代码语言:javascript
复制
    L = list(x)
代码语言:javascript
复制
    print(L[0], L[1], L[3])
代码语言:javascript
复制
    if L[1] == dir:
代码语言:javascript
复制
        walk(L[0])
代码语言:javascript
复制
    else:
代码语言:javascript
复制
        return

Z= uos.ilistdir()

X in z:

代码语言:javascript
复制
L = list(x)
代码语言:javascript
复制
print(L[0], L[1], L[3])
代码语言:javascript
复制
if L[1] == dir:
代码语言:javascript
复制
    walk(L[0])
代码语言:javascript
复制

代码以第7行中的一个错误结束,并有一个错误:

输出:

Traverse.py 32768 773

boot.py 32768 139

利比16384 0

-lib

一16384 0

-one

回溯(最近一次调用):

文件"stdin",第21行

文件"stdi>",第12行,步行

文件"

OSError: Errno 2 ENOENT

目录结构是:

代码语言:javascript
复制
one

    two

        three

    three.py

boot.py

main.py

one.py

Traverse.py

似乎停在一个没有文件的目录上,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-09 11:48:54

没有ESP测试,但这里有一些问题:

如果条目是一个文件,则不应该返回

  • ,而是继续,这就是为什么它停止得太快--
  • --您应该跳过当前和父目录,以避免无限递归的
  • --当递归时,您必须在顶层目录前面添加,这可能是错误的原因--您的代码调用了walk('two'),但是没有这样的目录,必须是
  • 可以在当前目录上使用walk函数,这样就不需要在重复实现的最后一位了。

此外:

list

  • and

  • 迭代ilistdir也会返回可以索引的tuple,因此不需要将其转换为将集合直接传递给printtuple,也不需要单独的ilistdir

修改,完全路径的打印略有不同,因此更容易理解:

代码语言:javascript
复制
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('.')

这仍然将打印两次目录,添加所有的索引使事情难以阅读。使用元组解压缩和打印目录进行一次调整:

代码语言:javascript
复制
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('.')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69062559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档