Pythonで店舗や支店の空フォルダを複数瞬時に作る

Pythonで仕事自動化:第3回の課題

店舗コードファイル(csv)から店舗名フォルダを瞬時に作成する。

python automation 3th practice

今回はPythonプログラムで複数の新規フォルダを瞬時に作成します。

同じフォルダを毎回作成することは、日常業務でよくあります。例えば、月次の売上集計や勤怠表などを店舗ごとに整理する場合です。

手作業では、右クリック -> 新規作成 -> フォルダ で作成できますが、これが数多くなると結構な時間がかかります。定型的な作業なので、これはプログラムにしてしまいましょう。

今回は店舗コードと店舗名のCSVファイルを読み込み、名前が「店舗コード_店舗名」のフォルダを瞬間作成します。店舗コードを先頭につけておけば、エクスプローラーで店舗コード順に表示されるので、見やすくなります。

この方法ならば、フォルダの数が100個でも、1000個でも毎回あっという間に作成できます。

この記事の目次

準備

以下の記事を参考にWindowsにPythonをインストールしてください。

PythonをWindowsにインストールしてプログラミング学習を始める(ガンマソフト株式会社)
https://gammasoft.jp/python/python-install-on-windows/

まず実行してみましょう

1. メニューからPythonのIDLEを開きます。

python idle select from menu

2. エディタを開いて、コードを貼り付ける

ツールバーのメニューから File > New File を選択すると新しいウィンドウが開きます。そこに、以下のプログラムコードをコピーして貼り付けてください。

import os, csv
storesPath = '店舗コード.csv'

file = open(storesPath, 'r', encoding='shift_jis')
reader = csv.reader(file)
for row in reader:
    folderName = row[0] + '_' + row[1]
    if not os.path.exists(folderName):
        os.mkdir(folderName)店舗コード
file.close()

IDLEには以下のように貼り付けます。

python editor copy code

3. コードの保存

ドキュメントフォルダ(Documents)に「programpy」フォルダを作成し、さらにその下に「automation_03」を作成しておきます(好きな名前でも大丈夫です)。ツールバーのメニューから File > Save を選択して、「makefolders.py」という名前で、作成したフォルダに保存します。

4. 店舗コードファイル(サンプル)の準備

簡単なサンプルを用意しましたので、ダウンロードして先ほど作成した「automation_03」フォルダにコピーします

サンプルファイル(店舗コード.csv)のダウンロード

圧縮ファイル(stores.zip)を解凍してください。ファイルの中身は、以下のようになっています。

stores code list

5. プログラムの実行

以下のようにツールバーのメニューから Run > Run Module を選択するとプログラムが実行されます。

python idle select from menu

6. 結果の確認

以下のように各店舗のフォルダが作成されます。

created folders

ダブルクリックして実行してみる

Pythonはexeファイルを作らなくても、そのままでどこでも実行できます。これが、非常に便利なところです。

「makefolders.py」と「店舗コード.csv」を適当なフォルダにコピーしてください。

「makefolders.py」を、ダブルクリックすると、そのフォルダ内に店舗フォルダを作成します。

カスタマイズのポイント

今回のコードをベースにいくつかのユースケースを考えてカスタマイズしてみます。

ケース1:「店舗コード.csv」にヘッダーがある場合

以下のように店舗コードのファイルにヘッダーがある場合も多いと思います。

created folders

そのような場合は、以下のように next(reader) により、先頭の1行を読み飛ばせば大丈夫です。

import os, csv
storesPath = '店舗コード.csv'

file = open(storesPath, 'r', encoding='shift_jis')
reader = csv.reader(file)
headerRow = next(reader) # 1行読み飛ばす
for row in reader:
    folderName = row[0] + '_' + row[1]
    if not os.path.exists(folderName):
        os.mkdir(folderName)店舗コード
file.close()
ケース2:「店舗コード.csv」が共有フォルダにある場合

店舗コードのファイルは、マスターを共有フォルダで管理している場合が多いと思います。

そのような場合、ホストのコンピューター名が「main-host」、共有フォルダ名が「Shared Folders」であれば、以下のようにファイル名(storesPath)を指定すれば、読み込むことができます(このようにネットワーク環境でコンピューター名を指定するのをUNCパスといいます)。

unc path

ただし、ここで注意が必要なのは、 r’ファイルパス’ のように、先頭に r を付けてください。これは、raw文字列と呼ばれるもので、シングルクォート(又はダブルクォート)で囲まれた文字列をそのまま表示します。

このrを付けないと、「¥t」 や「¥n」は、タブや改行の意味になってしまいます(これはエスケープシーケンスといいます)。