使用Python和sndhdr模块检查文件是否为音频文件

使用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

我正在创建一个小型python程序,该程序遍历文件夹结构,并对找到的每个音频文件执行一项任务

我需要确定哪些文件是音频文件,哪些文件是我希望该过程忽略的“其他文件”(例如,专辑封面的JPEG),然后移动到下一个文件

通过在StackOverflow/Google/etc上搜索,sndhdr模块出现在大多数列表的顶部-我似乎无法让sndhdr.what()方法返回除“None”之外的任何内容,无论我抛出多少个*.mp3文件。我的大纲如下,有人能告诉我我做错了什么吗

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文件。它只是说它是
“数据”