目录
一、需求
请编写 Python 脚本,统计附属压缩文件“wav.zip”中音频的时长,并将统计结果保存在与 “wav.zip”同级目录下,结果文件中音频的时长由高往低的顺序依次排列,A 列为音频文件名称,B 列为 时长(精确到毫秒,时长相同按文件的 MD5 值排序)
二、相关库
- os
- librosa
- hashlib
hanshlib安装时报错,解决办法:更改版本号即可这里用的是0.8.0
pip install hanshlib==0.8.0
- pandas
三、完整代码
因为作者偷懒所以直接放代码,具体步骤:
- 使用os把文件夹内所有的文件名遍历出来
- 把文件名拼上路径
- 用hashlib给文件生成对应的MD5值
- 调用librosa.get_duration来取得音频时长
- 用pandas对结果根据时长和MD5值来排序
- pandas存储到csv文件里
import os
import librosa
import hashlib
import pandas as pd
file_list = []
data_list = []
def get_duration_mp3_and_wav(file_path):
# 文件夹路径file_path是文件名os自动遍历的
file_paths = f'./wav2count/{file_path}'
md5 = hashlib.md5()
f = open(file_paths,'rb')
md5.update(f.read())
f.close()
MD5 = md5.hexdigest()
duration = librosa.get_duration(filename=file_paths)
data_list.append([file_path,duration,MD5])
# 文件夹路径
for a,s,k in os.walk('./wav2count'):
file_list.append(k)
for i in file_list[0]:
get_duration_mp3_and_wav(i)
data = pd.DataFrame(data_list)
datas = data.sort_values([1,2],ascending=False)
# 保存的文件名
datas.to_csv('./wav_result.csv')
四、一些问题
我只试过wav文件,mp3文件一个也可以,前提是文件夹里的文件全是要参与的文件,安装库的时候遇到问题简易回退一个大版本0.9.0=>0.8.0实际体验没多大区别。