我需要通过读取/更改一些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经验。我缺少一个模块/最佳实践吗?
答案 0 :(得分:2)
我会创建一个自定义类来包含一个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
答案 1 :(得分:2)
字典列表对我来说更有意义。
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'])
答案 2 :(得分:1)
为什么不使用免费捆绑的sqlite。
你得到排序&搜索内置数据库和数据库都是一次性的,因此可以管理额外的流程。
此外,随着您的代码开发,您可能希望为您的数据添加更多属性,然后dict等将变得无法管理。
能够查看数据库选择和思考
是有帮助的是的,我的数据看起来不错 - 下一部分应该很简单。
答案 3 :(得分:0)
也许是NamedTuple
s的列表?元组应该是Python AFAIK中消耗最少的类型之一。