假设我有以下列表:
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中,我知道每个项目都在一个列表中,所以也许我使用一些列表函数?
答案 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']