0

假设我有以下列表:

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

我有一个名为“This Boy.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

你知道那个文件格式的名字吗?您应该能够为文件找到一个解析器,它将为您提供适当的 Python 结构(例如 dict 或 multidict)的内容。

于 2012-06-18T11:59:38.337 回答
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 回答