3

我需要通过读取/更改一些 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 方面还没有足够的经验。是否有我缺少的模块/最佳实践?

4

4 回答 4

2

我会创建一个自定义类来包含一个 MP3 文件,每个字段一个变量。这样,您可以轻松编写函数来修改这些字段。然后我会为每个文件构造一个对象(使用文件名作为构造函数的参数,并使用构造函数填充字段),并将所有对象放入一个列表中。此类将包含对对象进行排序所需的功能。最后,我将编写一个自定义函数来从该列表生成 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
于 2013-02-07T21:44:39.557 回答
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'])
于 2013-02-07T22:06:30.277 回答
1

为什么不直接使用sqlite,它是免费捆绑的。

You get sorting & searching builtin and the databases are disposable so extra processes to manage.

Also the likelihood that as your code develops you'll want to add more attributes to you data and by then a dict etc. will become unmanageable.

It helps to be able to look a database select and think

Yeah, my data looks good - the next part should be easy.

于 2013-02-07T23:35:10.723 回答
0

也许是NamedTuples 的列表?元组应该是 Python AFAIK 中内存消耗最少的类型之一。

于 2013-02-07T22:41:03.290 回答