Python 获取目录中所有mp3文件的持续时间。

Python 获取目录中所有mp3文件的持续时间。,python,mp3,duration,Python,Mp3,Duration,首先,我是Python的初学者 我只需要自动添加mp3文件到我的商店。它们都在一个目录中。文件名将是产品名称,文件持续时间将是该产品的说明 我编写了一个简单的Python脚本,它从目录中读取所有mp3文件名,然后打印出来。 看起来是这样的: import os filenames = next(os.walk("./", topdown=True))[2] i = 0 while i < len(filenames): print(filenames[i].replace(".mp

首先,我是Python的初学者

我只需要自动添加mp3文件到我的商店。它们都在一个目录中。文件名将是产品名称,文件持续时间将是该产品的说明

我编写了一个简单的Python脚本,它从目录中读取所有mp3文件名,然后打印出来。 看起来是这样的:

import os
filenames = next(os.walk("./", topdown=True))[2]
i = 0
while i < len(filenames):
    print(filenames[i].replace(".mp3", ""))
    i += 1
您知道如何读取一个目录中所有*.mp3文件的持续时间并将其打印出来吗

你能试试这个吗

import os
from mutagen.mp3 import MP3
filenames = next(os.walk("./", topdown=True))[2]
for filename in filenames:
    audio = MP3(filename)
    print audio.info.length
    print(filename.replace(".mp3", ""))

甚至我也想要一个类似的问题。在浏览了各种网站后,我得到了一个答案。请参阅下面的代码。如果您使用的是windows操作系统,请记住在路径目录前写一个r

import os
from mutagen.mp3 import MP3
os.chdir(r"C:\Users\*#*")// path of the directory 
print("Directory changed") 
obj = os.scandir() 
def convert(seconds):
    hours = seconds // 3600
    seconds %= 3600
    mins = seconds // 60
    seconds %= 60
    return(hours, mins, seconds)
for entry in obj : 
    if entry.is_dir() or entry.is_file(): 
        audio = MP3(entry)
        hours, mins, seconds = convert(audio.info.length)
        print(str(int(hours)) + ":" + str(int(mins)) + ":" + str(int(seconds)))
        print(entry.name) // for audio file name
obj.close()
我使用了以下链接作为参考


我不知道那个图书馆。它可能提供一个函数,可以扫描文件列表或文件目录的信息,但您可能必须自己循环文件并逐个获取持续时间。
next(os.walk(“./”,top-down=True))[2]
有点复杂-它不会从所有子目录获取所有文件,只会获取第一个子目录。您应该对os.walk('.')中的路径、目录和文件执行完整的
…或者,如果您确实希望文件位于一个子目录中,则只需
os.scandir
该子目录,而不是使用
os.walk
@nosklo我不想从子目录加载文件。另外,这段代码是我使用Python的第一个5分钟,哈哈:)无论如何,谢谢你们的建议@KTW如果您不想加载子目录,那么
os.walk()
不是一个很好的匹配-它的全部要点是在目录结构中“漫游”。使用
os.scandir()
(或者
os.listdir()
如果您想让代码在Python3.4或更低版本上运行的话),经过几次调整后,它工作得非常好。非常感谢。
import os
from mutagen.mp3 import MP3
os.chdir(r"C:\Users\*#*")// path of the directory 
print("Directory changed") 
obj = os.scandir() 
def convert(seconds):
    hours = seconds // 3600
    seconds %= 3600
    mins = seconds // 60
    seconds %= 60
    return(hours, mins, seconds)
for entry in obj : 
    if entry.is_dir() or entry.is_file(): 
        audio = MP3(entry)
        hours, mins, seconds = convert(audio.info.length)
        print(str(int(hours)) + ":" + str(int(mins)) + ":" + str(int(seconds)))
        print(entry.name) // for audio file name
obj.close()