2013-02-07 23 views
3

我需要通過讀取/更改一些ID3標籤來處理文件夾中的所有MP3文件,以及獲取有關文件大小的細節等。最終目標是建立一個RSS文件,以便這些MP3將成爲一個自定義播客。我看到每個文件需要多達200個文件(行?)和5或6個數據(列?)。需要讀取所有數據,使用數據確定排序順序,並建立rss/xml文件。不確定Python中關於處理數據的最佳方法。如何在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中還沒有足夠的經驗。有沒有我錯過的模塊/最佳做法?

回答

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 
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']) 
0

NamedTuples也許清單?元組應該是Python AFAIK中最不耗費的類型之一。

+0

OP說他需要修改文件,元組超出表中,如果不是,NamedTuples將是我的第一選擇,集合模塊具有最高質量的結構。 –

1

爲什麼不只是使用sqlite它捆綁免費。

你得到排序&搜索內置和數據庫是一次性的,所以額外的進程來管理。

此外,隨着代碼開發的增加,您希望爲您的數據添加更多屬性,屆時dict等將變得難以管理。

它有助於能夠查看數據庫中選擇,並認爲

是啊,我的數據看起來不錯 - 在接下來的部分應該很容易。