Python 类 中的 Glob 以访问文件中的元素
Python Glob in Classes to access elements from file
您好,我在使用 glob 访问多个子目录中的文件列表时遇到问题。
这是我的代码:
class Folder:
"""Attempt to model typical folder."""
def __init__(self, path):
self.path = path
def get_folder(self):
files = glob.glob(os.path.join(self.path, "*"))
dir_list = []
for f in files:
if os.path.isdir(f):
dir_list = dir_list + [
os.path.join(self.path, elt) for elt in os.listdir(f)
]
return dir_list
def get_file(self):
dir_list = self.get_folder()
sf_list = []
for line in dir_list:
sep = os.path.sep
subfiles = glob.glob(sep.join([line, "*"]))
sf_list.append(subfiles)
return sf_list
代码结构如下:
datasets
Actor1,
emotion1
one.wav
two.wav
emotion2
one.wav
two.wav
Actor2
emotion1
one.wav
two.wav
emotion2
one.wav
two.wav
我的 Folder(datasets).get_folder()
的输出如下。
['...\datasets\Actor1\emotion1',
'...\datasets\Actor1\emotion2',
'...\datasets\Actor2\emotion2',
'...\datasets\Actor2\emotion2',]
但是当我尝试访问子文件夹中的文件并将其保存到变量中时,调用
Folder(datasets).get_file()
而不是返回所有子文件,
['...\datasets\Actor1\emotion1\one.wav',
'...\datasets\Actor1\emotion1'\two.wav',
'...\datasets\Actor2\emotion2\one.wav',
'...\datasets\Actor2\emotion2\two.wav',]
它输出一个包含多个空值的列表:
Out[3]: [ [], [], [], []]
你能帮忙吗?
我还没有测试过这个,但这对你来说可能是一个好的开始。
import pathlib
class Folder(pathlib.Path):
def files(self):
return [f for f in self.iterdir() if f.is_file()]
def folders(self):
return [f for f in self.iterdir() if f.is_dir()]
见https://docs.python.org/3/library/pathlib.html#pathlib.Path.iterdir。
因为我一直在寻找 wav 文件,所以我找到了我的问题的解决方案,该问题是针对我正在寻找的特定文件进行硬编码的。
不是最完美的答案,但很合适。
def get_file_list(self):
dir_list = self.get_folder_list()
for path in sorted(self.path.rglob('*.wav')):
print(path)
感谢大家!
您好,我在使用 glob 访问多个子目录中的文件列表时遇到问题。
这是我的代码:
class Folder:
"""Attempt to model typical folder."""
def __init__(self, path):
self.path = path
def get_folder(self):
files = glob.glob(os.path.join(self.path, "*"))
dir_list = []
for f in files:
if os.path.isdir(f):
dir_list = dir_list + [
os.path.join(self.path, elt) for elt in os.listdir(f)
]
return dir_list
def get_file(self):
dir_list = self.get_folder()
sf_list = []
for line in dir_list:
sep = os.path.sep
subfiles = glob.glob(sep.join([line, "*"]))
sf_list.append(subfiles)
return sf_list
代码结构如下:
datasets
Actor1,
emotion1
one.wav
two.wav
emotion2
one.wav
two.wav
Actor2
emotion1
one.wav
two.wav
emotion2
one.wav
two.wav
我的 Folder(datasets).get_folder()
的输出如下。
['...\datasets\Actor1\emotion1',
'...\datasets\Actor1\emotion2',
'...\datasets\Actor2\emotion2',
'...\datasets\Actor2\emotion2',]
但是当我尝试访问子文件夹中的文件并将其保存到变量中时,调用
Folder(datasets).get_file()
而不是返回所有子文件,
['...\datasets\Actor1\emotion1\one.wav',
'...\datasets\Actor1\emotion1'\two.wav',
'...\datasets\Actor2\emotion2\one.wav',
'...\datasets\Actor2\emotion2\two.wav',]
它输出一个包含多个空值的列表:
Out[3]: [ [], [], [], []]
你能帮忙吗?
我还没有测试过这个,但这对你来说可能是一个好的开始。
import pathlib
class Folder(pathlib.Path):
def files(self):
return [f for f in self.iterdir() if f.is_file()]
def folders(self):
return [f for f in self.iterdir() if f.is_dir()]
见https://docs.python.org/3/library/pathlib.html#pathlib.Path.iterdir。
因为我一直在寻找 wav 文件,所以我找到了我的问题的解决方案,该问题是针对我正在寻找的特定文件进行硬编码的。
不是最完美的答案,但很合适。
def get_file_list(self):
dir_list = self.get_folder_list()
for path in sorted(self.path.rglob('*.wav')):
print(path)
感谢大家!