如何在Python中处理小网格的数据



我需要通过读取/更改一些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中消耗内存最少的类型之一。

相关内容

  • 没有找到相关文章

最新更新