python - 将 for 循环的输出存储在数组中
问题描述
我的 Python 之旅还处于起步阶段,所以这个问题对于更高级的程序员来说可能是基本的。
我想分析一堆 .wav 文件,它们都存储在同一个目录中,所以我创建了一个所有文件名的列表,这样我就可以获得它们的音频信号和采样率。
dirPath=r"path_to_directory"
global files
files = [f for f in os.listdir(dirPath) if os.path.isfile(os.path.join(dirPath, f)) and f.endswith(".wav")]
for file_name in files:
path_to_file= dirPath+"\\"+file_name
audio_signal, sample_rate = sf.read(path_to_file)
sf
作为soundfile
图书馆。
audio_signal
是一个数组,sample_rate
是一个数字。
现在我希望能够同时存储它们audio_signal
和sample_rate
对应的file_name
,以便以后可以访问它们。我该怎么做呢?
我试过了
files = [f for f in os.listdir(dirPath) if os.path.isfile(os.path.join(dirPath, f)) and f.endswith(".wav")],[]
for file_name in files[0]:
path_to_file= dirPath+"\\"+file_name
audio_signal, sample_rate = sf.read(path_to_file)
files[1].append(audio_signal)
files[2].append(sample_rate)
这似乎可行,但有没有更优雅的方式?我觉得audio_signal
和是个人价值观,sample_rate
而file_name
不是相互依存的。
解决方案
您正在寻找的数据结构是一个关联数组,它将键与值相关联——在本例中,键是文件名,值是由音频信号和采样率组成的元组。
关联数组的实现作为字典类型内置在 Python 中。
您可以在此处了解字典: https ://docs.python.org/3/tutorial/datastructures.html#dictionaries
您代码中的应用程序如下所示:
result = {}
for file_name in files:
# as before:
# ...
audio_signal, sample_rate = ...
# new:
result[file_name] = audio_signal, sample_rate
推荐阅读
- css - Normalize.css 不工作 Angular 4/5
- go - 在 Golang 中重新排序地图
- csv - Golang 写新的 CSV 列
- mongodb - MongoDB,如何合并 2 个集合和搜索合并数据(不是简单的合并)
- python - 带有时间戳的熊猫数据框插入到mysql的问题
- python - 算法:课程顺序
- apache-kafka - 无法将来自 Confluent Kafka 主题的 avro 数据消耗到 Hbase
- java - 为什么“最小”不返回任何东西?
- c# - 2 跨多个类覆盖 ToString() 方法
- c# - 如何根据进程 ID 而不是进程名称获取 CPU 使用率