gpt4 book ai didi

python - 按艺术家组织歌曲| python ,眼睛3

转载 作者:太空宇宙 更新时间:2023-11-04 10:50:42 25 4
gpt4 key购买 nike

我正在尝试编写代码来组织超过 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'

我是编码新手,所以我确定这是一个简单的错误,但我只是不明白如何获得以艺术家信息作为名称的目录。感谢任何帮助

最佳答案

问题只是错误位置的括号。而不是这个:

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,因此 % 不支持关于 NoneTypeunicode 的错误。

在这种情况下,无论您在expanduser 之前还是之后进行格式化都没有关系,但您必须在mkdir 之前进行格式化。

作为旁注,尽管它是合法的,但使用单个值而不是元组进行 % 格式化通常不是一个好主意('~/Desktop/mp3-organizer/%s' % (song_info.tag.artist,)').使用现代 {} 格式通常是更好的主意('~/Desktop/mp3-organizer/{}'.format(song_info.tag.artist) ).使用 os.path 而不是字符串操作甚至更好,因此这些问题都不会首先出现。

此外,我注意到您在某些情况下使用手动展开的 root_folder,但在其他情况下使用 expanduser。您可能希望对此保持一致 — 否则,一旦您尝试在 ~ 不是 /Users/ntoscano 的另一台机器上使用它,它就会崩溃。而且,即使 OS X 允许您在某些情况下弄错路径名大小写,您也应该尽可能纠正错误。

综合起来:

root_folder = os.path.expanduser('~/Desktop/mp3-organizer')

files = os.listdir(root_folder) #lists all files in specified directory

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

abs_location = os.path.join(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.join(root_folder, song_info.tag.artist))
print song_info
print song_info.tag.artist

关于python - 按艺术家组织歌曲| python ,眼睛3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14131589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com