使用Python和sndhdr模块检查文件是否为音频文件
我正在创建一个小型python程序,该程序遍历文件夹结构,并对找到的每个音频文件执行一项任务 我需要确定哪些文件是音频文件,哪些文件是我希望该过程忽略的“其他文件”(例如,专辑封面的JPEG),然后移动到下一个文件 通过在StackOverflow/Google/etc上搜索,sndhdr模块出现在大多数列表的顶部-我似乎无法让sndhdr.what()方法返回除“None”之外的任何内容,无论我抛出多少个*.mp3文件。我的大纲如下,有人能告诉我我做错了什么吗使用Python和sndhdr模块检查文件是否为音频文件,python,python-2.7,audio,Python,Python 2.7,Audio,我正在创建一个小型python程序,该程序遍历文件夹结构,并对找到的每个音频文件执行一项任务 我需要确定哪些文件是音频文件,哪些文件是我希望该过程忽略的“其他文件”(例如,专辑封面的JPEG),然后移动到下一个文件 通过在StackOverflow/Google/etc上搜索,sndhdr模块出现在大多数列表的顶部-我似乎无法让sndhdr.what()方法返回除“None”之外的任何内容,无论我抛出多少个*.mp3文件。我的大纲如下,有人能告诉我我做错了什么吗 def import_folde
def import_folder(folder_path):
''' Imports all audio files found in a folder structure
:param folder_path: The absolute path of the folder
:return: True/False depending on whether the process was successful
'''
# Remove any spaces to ensure the folder is located correctly
folder_path = folder_path.strip()
for subdir, dirs, files in os.walk(folder_path):
for file in files:
audio_file = os.path.join(subdir, file)
print sndhdr.what(audio_file)
# The 'real' method will perform the task here
例如:
rootdir = '/home/user/FolderFullOfmp3Files'
import_folder(rootdir)
>>> None
>>> None
>>> None
...etc
标准库的模块似乎只识别标准库也能够实际打开的文件类型(“aifc”、“aiff”、“au”、“hcom”、“sndr”、“sndt”、“voc”、“wav”、“8svx”、“sb”、“ub”或“ul”)。 本机不支持MP3(也不支持OGG、FLAC等) 您可以尝试检测所有类型的文件(不仅仅是音频文件) 根据您的操作系统,您还可以对文件调用操作系统命令
file
,并使用Python解析结果
您也可以对文件执行任何您想执行的任务,只需使用
try
/except
检查是否发生异常。不会回答您的问题。。。但我很好奇为什么要在file.endswith(“.mp3”)上使用sndhr.what
来检查mp3文件?试着调用sndhdr.what('/a/literal/string/of/the/actual/path.mp3')
@Slayer:该文件可能是一个*.wav文件,或者文件中没有文件扩展名filename@Cyphase:sndhdr.what('/home/adam/Music/blackdog.mp3')也返回“None”(除非我误解了你所说的“文字字符串”是什么意思?)@AdamDynamic,你没有误解:)。您确定该文件存在并且是MP3吗?python magic
没有为我检测到MP3文件。它只是说它是“数据”