python フォルダとファイルを作成!同一名称のものがある時はスキップ!

内容

サンプルコードを用いて、同一名称のものがある時はスキップしながらフォルダとファイルを作成する方法を説明します。

ここで説明するコードの処理概要は下記です。
カレントディレクトリに下記画像の様なフォルダを300個(i=1から300)生成します。i個目のフォルダ・ファイルは、下記の画像の001となっている部分がiとなっています(3桁の0埋め)。

import os

FOLDER_NUM = 300
FILE_NUM = 6
#フォルダを作成するパスを設定します。本コードでは、pythonフォルダ内にフォルダを作成します。
basePath = "/home/user/atcoder/python/"
contestType = "abc"
problemType = ["a", "b", "c", "d", "e", "f"] 

for i_folder in range(1, FOLDER_NUM + 1):
    #作成対象のフォルダ名を生成 内容の一例:abc299
    folderName = contestType + str(i_folder).zfill(3)
    #内容の一例:/home/user/atcoder/python/abc299
    outputFolder = basePath + folderName

    #① 作成対象のフォルダと同名のフォルダが存在しない時、フォルダを作成
    if not os.path.exists(outputFolder):
        #② フォルダ作成
        os.mkdir(outputFolder)

    #ファイル作成
    for pType in problemType:
        #内容の一例:abc299f.py
        fileName = folderName + pType + ".py"
        #⑪ 内容の一例:/home/user/atcoder/python/abc299/abc299f.py
        outputFile = outputFolder + "/" + fileName
        #⑫ 作成対象のファイルと同名のファイルが存在しない時、ファイルを作成
        if not os.path.exists(outputFile):
            #⑬ ファイルを作成
            open(outputFile, "x")

フォルダ作成について

  • mkdir関数(フォルダ作成用)を使うためにosモジュールのimportが必要です。
  • #①:既にフォルダが存在する場合にmkdir関数を呼び出すと実行時エラーが発生してプログラムが強制終了してしまいます。それを防ぐために、exists関数により既にフォルダが存在する場合はmkdir関数を呼ばない様にしています。
  • #②:mkdir関数によってフォルダを作成します。

ファイル作成について

  • #⑪:「作成するフォルダ名+作成するファイル名」の形式で作成するファイルの名称と位置を設定します。
  • #⑫:既にファイルが存在する場合にファイルを作成すると実行時エラー(*1)が発生してプログラムが強制終了します。それを防ぐために、exists関数により既にファイルが存在する場合はファイルを作成しない様にしています。
    (*1)FileExistsError: [Errno 17]
  • #⑬:ファイルを作成します。ファイルが既に存在する場合は、実行時エラーが発生しファイルは作成されずにそこで処理が終了します。try-exceptを使用する場合は備考2を参照してください。

参考

  1. pathlib — オブジェクト指向のファイルシステムパス — Python 3.9.4 ドキュメント
    path.exists()の説明です。
  2. Create empty file using python – Stack Overflow
    空のファイルを作成します。open関数でファイルを作成した後に、close関数でファイルを閉じるべき理由について書かれています(閉じなくてもエラーは発生しません)。
  3. how to create empty file in python – Stack Overflow
    空のファイルを作成します。作成しようとしているファイルが既に存在している時に対応した、try-except処理が書かれています。
  4. 組み込み関数 — Python 3.9.4 ドキュメント
    open関数のmodeについて。
  5. os — 雑多なオペレーティングシステムインタフェース — Python 3.9.4 ドキュメント
    os.mkdir関数について。

コメント

タイトルとURLをコピーしました