0

次のリストがあるとします。

ID3_tag = ['Title','Artist','Album','Track']

そして、私は「ThisBoy.song」というファイルを持っています。その内容は次のとおりです。

[Title: This Boy]
[Artist: The Beatles]
[Album: Meet The Beatles!]
[Track: 3]

This Boy.songの特定のID3タグの値を返すにはどうすればよいですか?例えば:

>>> song = get_file_str('This Boy.song')
>>> search_ID3(Artist,song)
    The Beatles

編集:言及するのを忘れた。適切な行にたどり着くには、

def search_ID3(tag,file):
    for tag in ID3_tags:
        if tag in file:
            block

またはそのようなもの(または私はこれについて完全に間違っている可能性があります)。This Boy.songでは、各アイテムがリストに含まれていることを知っているので、リスト機能を使用するのではないでしょうか。

4

3 に答える 3

0

これはあなたが探していることをしますか?

def get_file_str(filename):
    ID3_tag = ['Title','Artist','Album','Track']
    out = ['','','','']
    with open(filename) as f:
        for line in f:
            try:
                (tag, value) = line.split(':')
                tag = tag.strip('[ ]\n')
                value = value.strip('[ ]\n')
                i = ID3_tag.index(tag)
                out[i] = value
            except Exception as e:
                print('Invalid data:', e)
                return -1
    return out

print(get_file_str('thisboy.song'))

出力:

['This Boy', 'The Beatles', 'Meet The Beatles!', '3']

編集:質問を編集して、すべてを返すのではなく、特定のタグを検索しました。もちろん、これは別の引数、を追加することで簡単に実現でき、等しい場合はdesiredTag戻ります。valuetagdesiredTag

于 2012-06-18T12:04:57.397 に答える
0
>>> from collections import defaultdict
>>> tags = defaultdict(list)
>>> with open('test.txt') as f:
...     for line in f.readlines():
...         if line.strip():
...              parts = line.split(':')
...              tags[parts[0].strip()[1:]].append(parts[1].strip()[:-1])
...
>>> tags['Artist']
['The Beatles']
于 2012-06-18T12:49:03.740 に答える
0

そのファイル形式の名前を知っていますか? 適切な Python 構造 (dict または multidict など) として内容を提供するファイルのパーサーを見つけることができるはずです。

于 2012-06-18T11:59:38.337 に答える