我正在尝试为一个项目生成一个音频数据集。为此,我使用librosa循环浏览我的音频文件(45秒的mp3剪辑),并将3条数据写入csv。一个是每个剪辑的标签(一个字符串),第二个是作为浮点时间序列的音频,第三个是采样率。为了做到这一点,我正在创建一个3人的字典并将其写入csv。浮点时间序列是一个数组。当我打印长度时,它返回一个值992250。当它写入文件时,它写7个值(前3个和最后3个,中间有一个‘…’元素。当我在加载到 Dataframe 的另一个函数中读取文件时验证了这一点。能帮我解决这个问题吗?非常感谢。
我应该补充一点,我首先尝试创建一个 Dataframe ,并在此版本之前使用df.to_csv()。两者都不起作用,它们都有相同的问题。我还在线查找了其他选项,看起来numpy数组可以直接写入csv?但我还需要每一行都有标签(“下面的ragam”)和“sr”。
with open('audio_data.csv', 'w') as f:
writer = csv.DictWriter(f, fieldnames=headers)
writer.writeheader()
for i, file in enumerate(flst):
if file.endswith(".mp3"):
audio, sr = librosa.core.load(os.getcwd() + folderpath + "/" + file)
print(type(audio))
print(str(len(audio)))
ragam = file.split(sep='-')[0]
elem = {
'ragam': ragam,
'audio': audio,
'sr': sr
}
writer.writerow(elem)
print("Completed: " + str(i + 1) + " of " + str(total) + " ...")
我决定以增量方式添加到csv,因为它是一个大型数据集,我想尝试保留任何进展,以防中途出现故障。下面是一个输出示例。
Loading audio data ...
/usr/local/lib/python3.7/dist-packages/librosa/core/audio.py:165: UserWarning: PySoundFile failed. Trying audioread instead.
warnings.warn("PySoundFile failed. Trying audioread instead.")
<class 'numpy.ndarray'>
992250
Completed: 1 of 5 ...
1条答案
按热度按时间wb1gzix01#
方法
writerow
转换字典中的每个复杂对象elem
在它的字符串表示中,这就是您获得此意外输出的原因。一个简单的解决方法是转换
np.array
到list
,即使用通过此更正,输出看起来不错,但列表保存为字符串,因此不容易恢复读取输出的初始数组。
另一种方法是将所有内容保存为json,因为json本机支持列表和字典。