4

MP3をディレクトリに保存し、存在しない場合はそのディレクトリを作成し、ディレクトリを作成できない場合はプログラムを終了したいという状況があります。os.path.exists()これは、よりもパフォーマンスへの影響が大きいことを読んだos.makedirs()ので、それを念頭に置いて、次のコードを作成しました。

try: 
    # If directory has not yet been created
    os.makedirs('Tracks')
    with open('Tracks/' + title + '.mp3', 'w') as mp3:
        mp3.write(mp3File.content)
        print '%s has been created.' % fileName

except OSError, e:
    # If directory has already been created and is accessible
    if os.path.exists('Tracks'):
        with open('Tracks/' + title + '.mp3', 'w') as mp3:
            mp3.write(mp3File.content)
            print '%s has been created.' % fileName

    else: # Directory cannot be created because of file permissions, etc. 
        sys.exit("Error creating 'Tracks' Directory. Cannot save MP3. Check permissions.")

これは意味がありますか?または、ディレクトリが最初に存在するかどうかを確認してから作成するという、よりクリーンでコストのかかるバージョンを使用する必要がありますか?9/10回、ディレクトリがそこにあります。

4

1 に答える 1

2

@ t-8chが言うように、try-exceptブロックはおそらくより高速ですが、それは実際には重要ではありません。ただし、それほど「汚れている」必要はありません。

try: 
    # try the thing you expect to work
    mp3 = open('Tracks/' + title + '.mp3', 'w')
except OSError, e:
    # exception is for the unlikely case
    os.makedirs('Tracks')
    mp3 = open('Tracks/' + title + '.mp3', 'w')

mp3.write(mp3File.content)
mp3.close()
print '%s has been created.' % fileName

最初にディレクトリを作成したい場合はtry、次のようにすることができます。

try: 
    # If directory has not yet been created
    os.makedirs('Tracks')
except OSError, e:
    # If directory has already been created or is inaccessible
    if not os.path.exists('Tracks')
        sys.exit("Error creating 'Tracks' Directory. Cannot save MP3. Check permissions.")
with open('Tracks/' + title + '.mp3', 'w') as mp3:
    mp3.write(mp3File.content)
    print '%s has been created.' % fileName
于 2013-03-06T22:45:53.210 に答える