从文本文件中读取ID3标记和值

时间:2012-06-18 11:47:52

标签: python python-2.7

假设我有以下列表:

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中,我知道每个项目都在一个列表中,所以也许我使用一些列表函数?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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轻松实现,如果value等于tag,则返回desiredTag

答案 2 :(得分: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']