0

40G の音楽を整理するための Python コードを書きましたが、それは私のコンピューターでしか機能しません。そのため、コードを一般化して、どのコンピューターのどのディレクトリでも機能するようにしたいと考えました。

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 に答える