3

いくつかのID3タグを読み取ったり変更したり、ファイルサイズなどの詳細を取得したりして、フォルダー内のすべてのMP3ファイルを処理する必要があります。最終的な目標は、これらのMP3がカスタムポッドキャストになるようにRSSファイルを作成することです。最大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

フィールドごとに 1 つの変数を含む 1 つの MP3 ファイルを含むカスタム クラスを作成します。このようにして、これらのフィールドを変更する関数を簡単に作成できます。次に、ファイルごとに 1 つのオブジェクトを作成し (ファイル名をコンストラクターのパラメーターとして使用し、コンストラクターを使用してフィールドを埋めます)、すべてのオブジェクトをリストに入れます。このクラスには、オブジェクトをソートするために必要な関数が含まれます。最後に、そのリストから 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を使用しないのはなぜですか。

並べ替えと検索が組み込まれており、データベースは使い捨てであるため、余分なプロセスを管理する必要があります。

また、コードが開発されるにつれて、データにさらに属性を追加する可能性があり、それまでに辞書などが管理できなくなります。

データベースを選択して考えることができるようになるのに役立ちます

ええ、私のデータは良さそうです。次の部分は簡単なはずです。

于 2013-02-07T23:35:10.723 に答える
0

おそらくNamedTuples のリスト?タプルは、Python AFAIK で最もメモリを消費しないタイプの 1 つでなければなりません。

于 2013-02-07T22:41:03.290 に答える