OS.Walk For Raspbian 上的循环难题
Posted
技术标签:
【中文标题】OS.Walk For Raspbian 上的循环难题【英文标题】:OS.Walk For loop conundrum on Raspbian 【发布时间】:2021-11-07 14:20:41 【问题描述】:我有一个脚本,最初在 Windows 上开发和运行,我需要在树莓派上运行。
它有 os.walk For 循环来识别 AVI 类型的文件。在窗户上工作得很好。但是,在 raspbian 上运行时,for 循环似乎没有完成,代码处于运行边缘。
需要注意的一点是,它正在循环访问使用 NFS 挂载的 NAS 驱动器上的文件。
我已从脚本中取出适当的代码并将其作为单独的 py 可执行文件运行,但问题相同。进行了一些更改以尝试使其正常工作,但它的行为始终相同。
#! /usr/bin/python3
import os
#with open('/home/pi/Documents/datafile.txt', 'w') as F:
#for d in os.walk('/home/mnt/cams',topdown=False):
# print(str(d))
#F.write(str(d) + '\n')
avilist=[[]]
for root, dirs, files in os.walk('/home/mnt/cams', topdown=True):
print("1")
files = [f for f in files if not f[0] == '.']
dirs[:] = [d for d in dirs if not d[0] == '.']
for name in files:
print(os.path.join(root, name))
if not ("trash" or "Cameras") in name:
if name.endswith(".avi"):
print(os.path.join(root, name))
avilist.append(os.path.join(root, name))
print("AVI: " + os.path.join(root, name))
else:
print("trash")
print("eryes")
print("erno")
print ("ermaybe")
我的输出结束是:
1
/home/mnt/cams/trashbox/test.bat
eryes
/home/mnt/cams/trashbox/output.txt
eryes
erno
1
erno
1
erno
1
erno
它没有进一步。我希望“ermaybe”暗示外部 for 循环的结束,但无论我离开多久,它都不会完成。 NFS 挂载的文件夹是否有任何问题?
【问题讨论】:
if not ("trash" or "Cameras") in name:
不是检查两个字符串的方法。应该是if "trash" not in name and "Cameras" not in name:
如果要查找目录层次结构中的所有.avi
文件,请使用glob.glob("/home/mnt/cams/**/*.avi", recursive=True)
是的,看看垃圾桶或相机的错误。谢谢
但是,我之前尝试过 glob,这似乎在没有输出的情况下做同样的事情。 avilist=[[]] for name in glob.glob('/home/mnt/cams' + "/**/*.avi", recursive = True): print("Anything")
输出外壳中没有输出。没有什么”。这就是为什么我想知道 NFS 挂载是否可能是问题所在。上面的作品在带有映射网络驱动器的 Windows 中运行。
这两个例子都表明那里没有 AVI 文件。
【参考方案1】:
无法解释原因,但 NFS 似乎导致了问题。 NAS 的 Sudo Mount 工作正常,我的脚本成功读取了文件夹文件。
【讨论】:
以上是关于OS.Walk For Raspbian 上的循环难题的主要内容,如果未能解决你的问题,请参考以下文章
【Python】os.walk的使用及获取文件夹下所有文件的大小
Python - Os.walk循环遍历不同驱动器中的目录列表