0

我编写了 python 代码来组织 40G 的音乐,但它只适用于我的计算机,所以我想概括代码,以便它可以在任何计算机的任何目录中工作。

import os #imports os functions
import eyed3 #imports eyed3 functions
import errno
import shutil

root_folder = os.getcwd()

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


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

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

        try:
            song_info = eyed3.load(abs_location) #loads each file into eyed3 and assignes the return value to song_info
        except IOError:
            pass
        if song_info.tag is None:
            print 'Skipping %s' % abs_location
            continue
        if song_info is None:
            print 'Skipping %s' % abs_location
            continue
            print 'Skipping %s' % abs_location
            continue
        try:
            os.mkdir(os.path.expanduser('~/Desktop/mp3-organizer/%s' % song_info.tag.artist))
        except OSError as e:
            if e.errno!= errno.EEXIST:
                raise
        except UnicodeDecodeError:
            pass
        try:
            os.mkdir(os.path.expanduser('~/Desktop/mp3-organizer/%s/%s' % (song_info.tag.artist, song_info.tag.album)))
        except OSError as e:
            if e.errno!= errno.EEXIST:
                raise
        except OSError:
                continue
        print song_info
        print song_info.tag.artist
        try :
            shutil.move('%s' % file_name, '%s/%s' % (song_info.tag.artist, song_info.tag.album))
        except UnicodeDecodeError:
            pass
        except shutil.Error:
            try:
                os.renames('%s' % file_name, '%s_%s' % (file_name, song_info.tag.artist))
            except OSError:
                pass
    else:
        pass

#improvements
    #have this work on other computers

我想将使用“~/Desktop/mp3-organizer/”的行更改为“root_folder/%s”% song_info.tag.artist,其中“root_folder”=当前工作目录

但我知道那行不通,我只是不知道如何“用词”它。

回顾一下,目标是让代码在放置脚本的目录中运行。不仅适用于我计算机中的特定目录。

感谢任何帮助

4

2 回答 2

1

您可以像这样获取当前目录:

>>> import os
>>> os.curdir
'.'
>>> d = os.path.realpath(os.curdir)
>>> print d
/Users/jdoe

然后,添加子目录:

>>> print os.path.join(d, 'mp3-organizer')
/Users/jdoe/mp3-organizer
于 2013-01-11T22:58:59.287 回答
0

要获取当前脚本的目录,请尝试:

import os
root_folder = os.path.abspath(__file__) 
mp3_dir = os.path.join(root_dir, 'mp3-organizer')

现在,无论您在哪个当前目录下运行脚本,您都可以填充 mp3_dir

于 2013-01-12T00:22:45.737 回答