问题描述
欢呼大家
我需要有关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文件,而不是针对我的情况,因此我需要在这里询问。 无论如何,谢谢您的帮助。
1楼
编辑:如果您想要一个示例的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以获得文档,并更多地了解所使用的功能。 该文档将为我提供更多帮助。
在另一个更详细解释的好答案。
2楼
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必须都可以访问。 对于文件,这意味着具有读取权限。 对于目录,这意味着读取和执行权限(列出内容)。