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循环遍历不同驱动器中的目录列表

知识点一,使用os库遍历文件夹(详细讲解)

用python os walk解压30000个子文件夹中的bz2文件?

os.walk 和os.path.walk的区别

python中的os.walk