我想创建一个简单的 python 脚本来查看文件夹和子文件夹,并使用包含 mp3 的文件夹的名称创建一个播放列表。但到目前为止,我只遇到过在 linux 上工作的 python 模块,或者我不知道如何安装它们(pymad)。
这只是为了我的 android 手机所以认为 m3u 格式应该这样做.. 除了 mp3 文件本身的名称之外,我不关心任何其他元数据。
实际上,我只是查看了http://en.wikipedia.org/wiki/M3U并发现编写 m3u 文件非常容易......应该能够通过简单的 python 写入文本文件来完成
这是我的解决方案
import os
import glob
dir = os.getcwd()
for (path, subdirs, files) in os.walk(dir):
os.chdir(path)
if glob.glob("*.mp3") != []:
_m3u = open( os.path.split(path)[1] + ".m3u" , "w" )
for song in glob.glob("*.mp3"):
_m3u.write(song + "\n")
_m3u.close()
os.chdir(dir) # Not really needed..
我编写了一些代码,它将根据您的条件返回所有嵌套播放列表候选者的列表:
import os
#Input: A path to a folder
#Output: List containing paths to all of the nested folders of path
def getNestedFolderList(path):
rv = [path]
ls = os.listdir(path)
if not ls:
return rv
for item in ls:
itemPath = os.path.join(path,item)
if os.path.isdir(itemPath):
rv= rv+getNestedFolderList(itemPath)
return rv
#Input: A path to a folder
#Output: (folderName,path,mp3s) if the folder contains mp3s. Else None
def getFolderPlaylist(path):
mp3s = []
ls = os.listdir(path)
for item in ls:
if item.count('mp3'):
mp3s.append(item)
if len(mp3s) > 0:
folderName = os.path.basename(path)
return (folderName,path,mp3s)
else:
return None
#Input: A path to a folder
#Output: List of all candidate playlists
def getFolderPlaylists(path):
rv = []
nestedFolderList = getNestedFolderList(path)
for folderPath in nestedFolderList:
folderPlaylist = getFolderPlaylist(folderPath)
if folderPlaylist:
rv.append(folderPlaylist)
return rv
print getFolderPlaylists('.')