В моей библиотеке из 3,6 тысяч песен 1,8 тысячи разных исполнителей. Я хотел бы отсортировать своих исполнителей в том порядке, от которого у меня больше всего треков, начиная с исполнителя с наибольшим общим количеством треков и заканчивая наименьшим.
Тем не менее, я также хотел бы, чтобы это общее количество включало песни, в которых они не являются оригинальными исполнителями, а вместо этого являются ремиксерами (поэтому их имя указано в названии трека), и если они являются соавторами (поэтому их имя и чье-либо имя - это имя исполнителя). заголовок). Мои песни не помечены ни оригинальным исполнителем, ни ремиксером в качестве исполнителя.
Как я могу отсортировать свою музыкальную библиотеку таким образом? Какое программное обеспечение может сделать это для меня? Я на Windows.
Я могу начать с нескольких строк python , он доступен для Windows , и библиотеку мутагена для чтения тегов ID3 , которую можно установить вместе сpip install mutagen
.
Затем очень несколько строк python:
import os
import collections
import mutagen
tracks = 0 # Track Counter
counter = collections.defaultdict(int) # Counter for the tracks by each artist
for root, dirs, names in os.walk(r'/path/to/your/collection'): # Walks the directory tree
for n in names:
if n.split('.')[-1].lower() in ['mp3', ]: # Filter for mp3 files
p = os.path.join(root, n)
try:
info = mutagen.easyid3.EasyID3(p) # Get the track info
tracks += 1
if info.has_key('artist'):
for a in info['artist']:
counter[a] += 1
except Exception, e: # NOT best practice
print e
# Wait a few seconds
print ('Tracks Scanned', tracks) # In my test this gave 4854 in
byf = [(c, n) for (n, c) in counter.iteritems()] # Convert dictionary to list
byf.sort(reverse=True) # Sort into descending order
for n in xrange(10): # Print top 10
print (byf[n])
Конечно, это само по себе не учитывает ремиксеры, но, не зная соглашения об именах, мне пришлось бы догадываться, как извлечь имя исполнителя из имени файла трека, я думаю, что регулярные выражения должны помочь.
(Foo Bar Remix)
почти исключительно в . Я думаю, что (в JS) .indexOf
подойдет для приблизительной оценки
Стив Барнс
Зак Сосье