如何使用 MicroPython 遍历文件夹中的文件?
How to iterate through files in a folder using MicroPython?
我正在尝试使用 MicroPython.
读取 SD 卡中所有扩展名为 .asm
和 .py
的文件
我检查了 this question 中的答案,但它们不适用于 MicroPython。
MicroPython 没有 glob
也没有 pathlib
,当使用 os
库并尝试此代码时:
for file in os.listdir('/sd'):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
print(filename)
我收到这个错误'module' object has no attribute 'fsdecode'
我怎样才能让它与 MicroPython 一起工作?
你在正确的轨道上,os.listdir
在任何版本的 MicroPython 上工作得很好,但不会递归 sub-folders。
所以你需要区分文件夹和文件节点,如下所示。
"""Clean all files from flash
use with care ; there is no undo or trashcan
"""
import uos as os
def wipe_dir( path=".",sub=True):
print( "wipe path {}".format(path) )
l = os.listdir(path)
l.sort()
#print(l)
if l != ['']:
for f in l:
child = "{}/{}".format(path, f)
#print(" - "+child)
st = os.stat(child)
if st[0] & 0x4000: # stat.S_IFDIR
if sub:
wipe_dir(child,sub)
try:
os.rmdir(child)
except:
print("Error deleting folder {}".format(child))
else: # File
try:
os.remove(child)
except:
print("Error deleting file {}".format(child))
# wipe_dir(path='/')
对于一个简单的 listdir,你不需要 fsdecode
,事实上它不是 MicroPython os module 的一部分
请记住,MicroPython 具有优化的 sub-set 模块和方法。
for filename in os.listdir("/sd"):
if filename.endswith(".asm") or filename.endswith(".py"):
print(filename)
实际上,为了避免子文件夹,您应该检查类型,可以使用 os.ilistdir
找到
for entry in os.ilistdir("/sd"):
# print(entry)
if entry[1] == 0x8000:
filename = entry[0]
if filename.endswith(".asm") or filename.endswith(".py"):
print(filename)
我正在尝试使用 MicroPython.
读取 SD 卡中所有扩展名为.asm
和 .py
的文件
我检查了 this question 中的答案,但它们不适用于 MicroPython。
MicroPython 没有 glob
也没有 pathlib
,当使用 os
库并尝试此代码时:
for file in os.listdir('/sd'):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
print(filename)
我收到这个错误'module' object has no attribute 'fsdecode'
我怎样才能让它与 MicroPython 一起工作?
你在正确的轨道上,os.listdir
在任何版本的 MicroPython 上工作得很好,但不会递归 sub-folders。
所以你需要区分文件夹和文件节点,如下所示。
"""Clean all files from flash
use with care ; there is no undo or trashcan
"""
import uos as os
def wipe_dir( path=".",sub=True):
print( "wipe path {}".format(path) )
l = os.listdir(path)
l.sort()
#print(l)
if l != ['']:
for f in l:
child = "{}/{}".format(path, f)
#print(" - "+child)
st = os.stat(child)
if st[0] & 0x4000: # stat.S_IFDIR
if sub:
wipe_dir(child,sub)
try:
os.rmdir(child)
except:
print("Error deleting folder {}".format(child))
else: # File
try:
os.remove(child)
except:
print("Error deleting file {}".format(child))
# wipe_dir(path='/')
对于一个简单的 listdir,你不需要 fsdecode
,事实上它不是 MicroPython os module 的一部分
请记住,MicroPython 具有优化的 sub-set 模块和方法。
for filename in os.listdir("/sd"):
if filename.endswith(".asm") or filename.endswith(".py"):
print(filename)
实际上,为了避免子文件夹,您应该检查类型,可以使用 os.ilistdir
for entry in os.ilistdir("/sd"):
# print(entry)
if entry[1] == 0x8000:
filename = entry[0]
if filename.endswith(".asm") or filename.endswith(".py"):
print(filename)