我需要通过读取/更改一些ID3标签以及获取文件大小等细节来处理文件夹中的所有MP3文件。最终目标是构建一个RSS文件,使这些MP3成为一个自定义播客。我认为可能需要多达200个文件(行?)和关于每个文件的5或6条数据(列?)。需要读取中的所有数据,使用这些数据来确定排序顺序,并构建rss/xml文件。不确定Python中处理数据的最佳方法。
看到了"字典中的字典"的代码想法,但这看起来有点笨拙?
mydict = {'MP3_File_1.mp3':
{'SIZE': '123456789','MODDATE': '20120508', 'TRKNUM': '152'},
'MP3_File_2.mp3':
{'SIZE': '45689654', 'MODDATE': '20120515', 'TRKNUM': '003'},
'MP3_File_3.mp3':
{'SIZE': '98754651', 'MODDATE': '20130101', 'TRKNUM': '062'}}
无论是真正的数据库还是pyTables,都显得有些过头了。我也在考虑创建一个自定义类,但还没有足够的Python经验。我是否缺少某个模块/最佳实践?
我会创建一个自定义类来包含一个MP3文件,每个字段一个变量。通过这种方式,您可以轻松地编写函数来修改这些字段。然后,我将为每个文件构造一个对象(使用filename作为构造函数的参数,并使用构造函数填充字段),并将所有对象放入列表中。这个类将包含对对象进行排序所需的函数。最后,我将编写一个自定义函数,从该列表中生成XML文件。
这不是唯一的方法,但这是我会做的。
class Mp3file(object):
def __init__(self, filename):
# read the file
self.name = filename
self.size = ...
self.moddate = ...
self.track_num = ...
...
def to_xml(self):
return ...
def __lt__(self):
....
def __eq__(self):
....
...
mp3list = []
for filename in directory:
mp3list.append(Mp3file(filename))
def mp3list_to_xml(mylist):
# write preamble
for mf in sorted(mylist):
x = mf.to_xml()
# Add x to xml
# write footer
字典列表对我来说更有意义。
mp3s = [
{'NAME': 'lalala.mp3', 'SIZE': '123456789','MODDATE': '20120508', 'TRKNUM': '152'},
{'NAME': 'lelele.mp3', 'SIZE': '45689654', 'MODDATE': '20120515', 'TRKNUM': '003'},
{'NAME': 'lululu.mp3', 'SIZE': '98754651', 'MODDATE': '20130101', 'TRKNUM': '062'}]
如果你想排序就这么简单:
sor = sorted(mp3s, key=lambda x: x['NAME'])
为什么不直接使用sqlite呢?它是免费捆绑的。
你得到排序&搜索内建和数据库是一次性的,因此需要管理额外的过程。
此外,随着代码的开发,您可能希望为数据添加更多属性,然后dict等将变得无法管理。
它有助于能够查看数据库选择并思考
是的,我的数据看起来不错——下一部分应该很容易。
可能是NamedTuple
的列表?元组应该是Python AFAIK中消耗内存最少的类型之一。