Сортировать исполнителей по количеству треков, включая ремиксы

В моей библиотеке из 3,6 тысяч песен 1,8 тысячи разных исполнителей. Я хотел бы отсортировать своих исполнителей в том порядке, от которого у меня больше всего треков, начиная с исполнителя с наибольшим общим количеством треков и заканчивая наименьшим.

Тем не менее, я также хотел бы, чтобы это общее количество включало песни, в которых они не являются оригинальными исполнителями, а вместо этого являются ремиксерами (поэтому их имя указано в названии трека), и если они являются соавторами (поэтому их имя и чье-либо имя - это имя исполнителя). заголовок). Мои песни не помечены ни оригинальным исполнителем, ни ремиксером в качестве исполнителя.

Как я могу отсортировать свою музыкальную библиотеку таким образом? Какое программное обеспечение может сделать это для меня? Я на Windows.

Как хранится текущая информация об исполнителе (исполнителях), ремиксере, т.е. в имени каталога, названии трека или в тэгах MP3?
@SteveBarnes оригинальные исполнители хранятся в метаданных исполнителя, а не в имени трека. Ремиксы сохраняются только в названии трека

Ответы (1)

Я могу начать с нескольких строк 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подойдет для приблизительной оценки
@ZachSaucier - Конечно, приведенное выше не поможет вам определить, какие треки приписываются данному исполнителю, но вы можете легко создать и сохранить словарь путей и названий треков одновременно с именами исполнителей. Я немного изменю приведенный выше код, чтобы добавить его и теги Foo Bar.