当前位置: 代码迷 >> python >> 遍历父目录子目录中的.wav文件
  详细解决方案

遍历父目录子目录中的.wav文件

热度:44   发布时间:2023-07-14 08:46:22.0

欢呼大家

我需要有关Python 3.6中的某些内容的帮助。 所以我有这样的数据结构:

  |main directory
  |    |subdirectory's(plural)
  |    |      |.wav files

我目前正在放置主目录的目录中工作,因此我不需要在此之前指定路径。 因此,首先,我想遍历我的主目录并找到所有子目录。 然后,在每个文件中,我想找到.wav文件,处理完这些文件后,我要转到下一个子目录,依此类推,直到打开所有文件,并处理完所有.wav文件。 正是我想要对这些.wav文件进行的操作是在程序中输入它们,对其进行处理,以便可以将它们转换为numpy数组,然后将其转换为其他对象(确切地说是使用tensorflow进行转换)到TF对象)。 我写了整个过程,如果有人也对此有任何快速建议,那为什么不呢。 我尝试使用for循环来执行此操作,例如:

for subdirectorys in open(data_path, "r"):
    for files in subdirectorys:
        #doing some processing stuff with the file 

问题是,它总是会引发错误13,在我给他的data_path上拒绝显示权限,但是当我进入属性时,似乎还可以,所有权限都很好。 我尝试了其他一些方法,例如使用os.open或用以下方法替换了loop:

with open(data_path, "r") as data:

并且总是会引发“拒绝权限”错误。 os.walk以某种方式工作,但这不是我所需要的,当我尝试对其进行修改时,id并没有给出错误,但也没有任何作用。 只是说我不是python的专业程序员,所以我可能会遗漏一个显而易见的东西,但是,我是在这里提问和学习。 我也看到了很多类似的问题,但是它们主要集中于.txt文件,而不是针对我的情况,因此我需要在这里询问。 无论如何,谢谢您的帮助。

编辑:如果您想要一个示例的glob(更理智),这里是:

from pathlib import Path

# The pattern "**" means all subdirectories recursively,
# with "*.wav" meaning all files with any name ending in ".wav".
for file in Path(data_path).glob("**/*.wav"):
    if not file.is_file():  # Skip directories
        continue

    with open(file, "w") as f:
        # do stuff

有关更多信息,请参见文档中的 。 球形模式是很有用的知识。

先前的答案:

尝试使用glob或os.walk() 这是os.walk()的示例。

from os import walk, path

# Recursively walk the directory data_path
for root, _, files in walk(data_path):
    # files is a list of files in the current root, so iterate them
    for file in files:
        # Skip the file if it is not *.wav
        if not file.endswith(".wav"):
            continue

        # os.path.join() will create the path for the file
        file = path.join(root, files)
        # Do what you need with the file
        # You can also use block context to open the files like this
        with open(file, "w") as f:  # "w" means permission to write. If reading, use "r"
             # Do stuff

请注意,您可能对open()功能感到困惑。 它打开一个文件以供读取,写入和附加。 目录不是文件,因此无法打开。

我建议您使用Google以获得文档,并更多地了解所使用的功能。 该文档将为我提供更多帮助。

在另一个更详细解释的好答案。

import glob
import os

main = '/main_wavs'
wavs = [w for w in glob.glob(os.path.join(main, '*/*.wav')) if os.path.isfile(w)]

就路径A / B / C ...上的权限而言,A,B和C必须都可以访问。 对于文件,这意味着具有读取权限。 对于目录,这意味着读取和执行权限(列出内容)。

  相关解决方案