pythonカスタム関数§06:WriteFilePath() Pythonsスクリプト直下にフォルダを作る

Pythonをもっと便利にしよう!

カスタム関数シリーズでは、便利に使えるオリジナル関数を紹介しています。

※カスタム関数は、一般的には「ユーザー定義関数」と呼ばれています

フォルダを作成する os.mkdir(PathName)

スクリプトファイルのある場所(パス)を取得するのは、簡単で、sys.argv[0]に格納されています。スクリプトファイルのフルパス名、ファイル名のみ、フォルダ名のみなどを簡単に取得できるカスタム関数はこちらに詳しく紹介しています リンク →

カスタム関数:ScriptPath() pythonファイルのスクリプト名、フルパス名、ディレクトリ名を取得

そして、フォルダを作成する方法は、osライブラリーを使って

os.mkdir(パス名)

とすれば作れます。しかし、このos.mkdirは制約があり、すでに存在するフォルダを作成しようとするとエラーが出てしまいます

フォルダが存在しているか調べる os.path.isdir(pathname)

もし、フォルダがすでに存在していればエラーが出るので、存在の有無を調べる必要があります。

osライブリーのos.path.isdir()関数を使えば、調べられます。もし、存在していればTrueが返ってきます。存在しない場合は、Falseが返ってきます。

 

スクリプトファイルのある場所の直下に指定したフォルダの存在を調べて、フォルダを作成する方法 WiteFilePath()

 

def WriteFilePath(Pathname='ReadWrite_Data'):     
    writepath=os.path.join(ScriptPath()[2],Pathname)
    if not os.path.isdir(writepath):
        os.mkdir(writepath)
    return writepath

手順はまず

  1. スクリプトパスを所得して
  2. 指定したフォルダ名とスクリプトパスを結合したパス名を生成
  3. 指定したフォルダが存在しないときだけ、フォルダを作成する

の3つです。

writepath=os.path.join(ScriptPath()[2],Pathname)

この行で、カスタム関数:ScriptPath()を使って、スクリプトファイルパスを取得し、指定したフォルダPathnameと、os.path.join関数で、結合します。

if not os.path.isdir(writepath):
        os.mkdir(writepath)

そして、このif文のように指定したフォルダwritepathが存在しない場合だけ、次の行でフォルダを作成するようにします。

return writepath

最後のretrun文で作成したフォルダ名をフルパスで返すようにしています。

この戻り値を再利用できるようにしています。

WriteFilePath(Pathname=’ReadWrite_Data’) 引数について

最初の引数Pathnameはオプション引数なので、省力可能です。もし省略した場合は、デフォルトのReadWrite_Dataというフォルダが作成されます。

WriteFilePath() の使い方

使い方例を示します。

import os
import sys

def WriteFilePath(Pathname='ReadWrite_Data'):     
    writepath=os.path.join(ScriptPath()[2],Pathname)
    if not os.path.isdir(writepath):
        os.mkdir(writepath)
    return writepath

def ScriptPath():
    # ■## ScriptPath():   スクリプトパスを取得
    #ScriptPath()[0]:basename ScriptPath()[1]:pathname ScriptPath()[2]:fulpath  
    basename=os.path.basename((sys.argv[0]))
    pathname=os.path.abspath(os.path.dirname(sys.argv[0]))
    fullpath=os.path.join(pathname,basename)
    return (basename,fullpath,pathname)

#■メインプログラム
if __name__  == '__main__':

    path=WriteFilePath(Pathname='MyData')
    print(f'フォルダ:{path}を作成しました')
    
    a=input('プログラムが終了しました。Enterキーを押してください!')
import sys

最初の2行ライブラリーインポートを忘れずに。これがないとエラーば出てしまいます。

if __name__  == '__main__':

この行は、いまのところはおまじないとして入れてください。(自作のモジュールファイルなどを利用するときに重要な意味が出てきます)

    path=WriteFilePath(Pathname='MyData')
    print(f'フォルダ:{path}を作成しました')

WriteFilePath関数の戻り値を変数pathに入れて、次の行で表示しています。print文のfはフォーマット文字列を指定しています。フォーマット関数について詳しくはこちら→ フォーマット関数

a=input('プログラムが終了しました。Enterキーを押してください!')

最後のinput文は、表示を止めたいときに使います。

コメント