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

时间:2013-02-07 21:36:46

标签: python dictionary multidimensional-array

我需要通过读取/更改一些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 个答案:

答案 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)

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