由艺术家组织歌曲|蟒蛇,眼睛3

时间:2013-01-03 00:51:53

标签: python directory

我试图编写代码来组织+ 40G音乐,我想按艺术家组织,到目前为止我已经能够获得艺术家信息,但我正在努力创作每个艺术家的目录,并且具有相同艺术家的歌曲进入同一目录,而不是为每首歌曲创建单独的目录。

import os #imports os functions
import eyed3 #imports eyed3 functions

root_folder = '/Users/ntoscano/desktop/mp3-organizer'

files = os.listdir(root_folder) #lists all files in specified directory
if not files[1].endswith('.mp3'):
    pass #if the file does not end with ".mp3" it does not load it into eyed3

for file_name in files:
    #if file_name.endswith('.mp3'): continue #if file ends with ".mp3" it continues onto the next line

    abs_location = '%s/%s' % (root_folder, file_name)

    song_info = eyed3.load(abs_location) #loads each file into eyed3 and assignes the return value to song_info
    if song_info is None:
        print 'Skippig %s' % abs_location
        continue
     os.mkdir(os.path.expanduser('~/Desktop/mp3-organizer/%s')) % song_info.tag.artist
     print song_info
     print song_info.tag.artist

这是我到目前为止所做的,但它已经坏了,第19行总是给我一个错误,

Nicolass-MacBook-Air:mp3-organizer ntoscano$ python eyeD3test.py 
Skippig /Users/ntoscano/desktop/mp3-organizer/.DS_Store
Traceback (most recent call last):
  File "eyeD3test.py", line 19, in <module>
    os.mkdir(os.path.expanduser('~/Desktop/mp3-organizer/%s')) % song_info.tag.artist
TypeError: unsupported operand type(s) for %: 'NoneType' and 'unicode'

我是编码的新手,所以我确定这是一个简单的错误,但我不知道如何获得以艺术家信息为名的目录。任何帮助都是apreciated

1 个答案:

答案 0 :(得分:4)

问题只是在错误的地方括号。而不是:

os.mkdir(os.path.expanduser('~/Desktop/mp3-organizer/%s')) % song_info.tag.artist

这样做:

os.mkdir(os.path.expanduser('~/Desktop/mp3-organizer/%s' % song_info.tag.artist))

如果将其分解成碎片,这将更容易看出:

expanded = os.path.expanduser('~/Desktop/mp3-organizer/%s')
dir = os.mkdir(expanded)
formatted = dir % song_info.tag.artist

所以,你正在创建一个名为/Users/ntoscano/Desktop/mp3-organizer/%s的目录,并且正在返回None,然后你正在执行None % song_info.tag.artist,因此出现了关于NoneType和{的错误{1}}不支持unicode

在这种情况下,无论您是在%之前还是之后进行格式化都无关紧要,但您必须在expanduser之前进行格式化。

作为旁注,即使它是合法的,使用单个值而不是mkdir的元组 - 格式化(%)通常是个坏主意。而使用现代'~/Desktop/mp3-organizer/%s' % (song_info.tag.artist,)'格式代替({})通常更好。使用'~/Desktop/mp3-organizer/{}'.format(song_info.tag.artist)而不是字符串操作更好,所以这些问题都不会出现在第一位。

此外,我注意到您在某些情况下使用的是手动扩展的os.path,而在其他情况下则是root_folder。您可能希望对此保持一致 - 否则,只要您尝试在expanduser不是~的另一台计算机上使用它,它就会中断。而且,即使OS X允许您在某些情况下使路径名案例出错,您也应该尽可能地使它们正确。

全部放在一起:

/Users/ntoscano