Pythonで温度・湿度ロガー IBS-TH1 PLUSのデータを分析してみる その2:フォルダの確認・作成&再作成

スポンサーリンク

インポートとパスの確認

前回、温度・湿度ロガーのデータ分析のため、フォルダ構造を考えてみました。

Pythonで温度・湿度ロガー IBS-TH1 PLUSのデータを分析してみる その2:フォルダの確認・作成&再作成
インポートとパスの確認前回、温度・湿度ロガーのデータ分析のため、フォルダ構造を考えてみました。フォルダ構造が決まったので、今回はこの部分のプログラミングをしてみましょう。まずは今回使うosモジュールとshu...

フォルダ構造が決まったので、今回はこの部分のプログラミングをしてみましょう。

まずは今回使うosモジュールとshutilモジュールをインポートします。

import os
import shutil

osモジュールはフォルダの作成などに、shutilモジュールはフォルダの削除に用います。

とりあえず現在いる場所を変数pathに保存して、合っているかちょっと確認。

import os
import shutil

path = os.getcwd()

print(path)

実行結果
/Users/username/Desktop/inkbird-3/test

現在は「/Users/username/Desktop/inkbird-3/test」にいると表示され、合っていることが確認できました。

問題ないことが分かったので、「print(path)」は行の最初に#をつけて、コメントアウトしておきます。

スポンサーリンク

現在のパス内のファイル・フォルダ名の取得

次にこのフォルダ内にどんなファイル、フォルダがあるか確認します。

この際、os.listdir(“フォルダ”)でフォルダ内のファイル・フォルダのリストを取得します。

そしてfor関数で一つ一つ表示してみます。

import os
import shutil

path = os.getcwd()

# print(path)

for f in os.listdir(path):
    print(f)

実行結果
.DS_Store
temperature_testdata1.csv
inkbird_plotter_ver0.1.ipynb
.ipynb_checkpoints

「.DS_Store」はMac特有のフォルダなので気にしないでください。

「.ipynb_checkpoints」はAnacondaが自動で作成する自動保存用フォルダなので気にしないでください。

「inkbird_plotter_ver0.1.ipynb」は現在作成しているPythonプログラムのファイルです。

「temperature_testdata1.csv」が温度・湿度が入ったデータです。

スポンサーリンク

フォルダ名のみ取得

ここで欲しいのはフォルダだけなので、os.path.isdir(“ファイルかフォルダ名”)を使って、フォルダのみ取得します。

このos.path.isdir(“X”)はXがフォルダの場合、「True」という値を返します。

またフォルダでない場合、「False」という値を返します。

そこでif関数を用いて、os.path.isdir(“X”)がTrueとなる場合を場合分けします。

またTrueとなった時のフォルダ名をリストに移しておきます

import os
import shutil

path = os.getcwd()

# print(path)

dirnames = []

for f in os.listdir(path):
    if os.path.isdir(f) == True:
        dirnames.append(f)
        
print(dirnames)

実行結果
['.ipynb_checkpoints']

ということでフォルダである「.ipynb_checkpoints」が取得できました。

ちなみに「.DS_Store」もフォルダなのですが、何故か表示されませんでした。

特に重要でもないので放置しておきます。

確認できたので、「print(dirnames)」はコメントアウトしておきます。

スポンサーリンク

Data、Graphフォルダがない場合、フォルダの作成

現状ではDataフォルダ、Graphフォルダがないので、これらのフォルダがない場合からプログラミングしていきましょう。

「if “X” not in “Y”:」で「Yというリストの中にXがない場合」という場合分けをすることができます。

そしてos.mkdir(“フォルダ名”)でフォルダを作成します。

import os
import shutil

path = os.getcwd()

# print(path)

dirnames = []

for f in os.listdir(path):
    if os.path.isdir(f) == True:
        dirnames.append(f)
        
# print(dirnames)

if "Data" not in dirnames:
    os.mkdir("Data")
    
if "Graph" not in dirnames:
    os.mkdir("Graph")

このプログラムを初めて実行する場合、DataとGraphというフォルダが作成されます。

スポンサーリンク

Data、Graphフォルダがある場合、フォルダを削除し、再作成

次にData、Graphフォルダがある場合、まずはこれらのフォルダを削除し、再度同じData、Graphフォルダを作成します。

shutil.rmtree(“フォルダ名”)でフォルダの中身があろうがなかろうがフォルダを削除できます。

そして再度os.mkdir(“フォルダ名”)でフォルダを作成します。

import os
import shutil

path = os.getcwd()

# print(path)

dirnames = []

for f in os.listdir(path):
    if os.path.isdir(f) == True:
        dirnames.append(f)
        
# print(dirnames)

if "Data" not in dirnames:
    os.mkdir("Data")
elif "Data" in dirnames:
    shutil.rmtree("Data")
    os.mkdir("Data")
    
if "Graph" not in dirnames:
    os.mkdir("Graph")
elif "Graph" in dirnames:
    shutil.rmtree("Graph")
    os.mkdir("Graph")

これでData、Graphフォルダがある、なしに関わらず、新しいData、Graphフォルダを作るプログラムができました。

スポンサーリンク

関数化

このままでは色々と無駄がありますし、今後、同じプログラムを書く可能性があるので、関数化していきます。

今回、関数化しておくのは、この部分。

if "Data" not in dirnames:
    os.mkdir("Data")
elif "Data" in dirnames:
    shutil.rmtree("Data")
    os.mkdir("Data")
    
if "Graph" not in dirnames:
    os.mkdir("Graph")
elif "Graph" in dirnames:
    shutil.rmtree("Graph")
    os.mkdir("Graph")

DataフォルダとGraphフォルダを確認、作成する部分ですが、これは”Data”と”Graph”という対象が違うだけで、プログラムとしては同じものになっています。

そこでこの部分を関数としてしまいましょう。

関数化するにはdef関数を用います。

Pythonで自分で関数を定義する方法 その1 〜def文の基本と注意点〜
自分の関数を定義する必要性今回はpythonのdef関数に関して、解説をしていきます。プログラミングをしていくと、何度も何度も同じ処理をするプログラムを書くことがでてくることでしょう。何度も書いていくと、どうしても...

引数としては、作りたいフォルダ名と現在のフォルダ内のフォルダ名のリストの二つが必要です。

それらを2つの引数、dirnameとdirlistとして関数にしてみました。

import os
import shutil

def dir_check(dirname, dirlist):
    if dirname not in dirlist:
        os.mkdir(dirname)
    elif dirname in dirlist:
        shutil.rmtree(dirname)
        os.mkdir(dirname)

path = os.getcwd()

# print(path)

dirnames = []

for f in os.listdir(path):
    if os.path.isdir(f) == True:
        dirnames.append(f)
        
# print(dirnames)

dir_check("Data", dirnames)
dir_check("Graph", dirnames)

これでフォルダの確認と作成(再作成)を関数化できました。

ちょっとスッキリした感じで見えますよね?

とりあえず今回はここまでとしておきましょう。

次回はファイルを読み込み、値を取得するところを作成したいと思います。

Pythonで温度・湿度ロガー IBS-TH1 PLUSのデータを分析してみる その3:CSVファイルの読み込み
前回のおさらい:フォルダの確認・作成前回までに温度・湿度ロガーのデータを分析するため、フォルダを確認・作成(再作成)するプログラムを作成しました。今回はとうとう温度・湿度ロガーIBS-TH1 PLUSのデータを読み...

ということで今回はこんな感じで。

コメント

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