目次
概要
osモジュールを使用すると、とOSに依存する機能を可能な限り同一の書き方で同一の機能を利用可能。
OSに依存するケースとしては例えば以下がある。
・Windows:‘\’
・Linux:‘/’
・Linux:‘/’
上記のようなOSに依存する差異をosモジュールは吸収する。
前提
フォルダ構成は以下とする。
osモジュールの使い方
パスの結合:os.path.join()
パスの区切り文字を、実行する環境ごとに切り替えるのは不便。
そこで、os.path.joinを使用すれば区切り文字を意識せずパスの結合が可能になる。
import os
# 自身のosの区切り文字を表示
print(os.sep) # \
# os.sepの区切り文字を使用して、パス結合する
path = os.path.join("work", "input_dir")
print(path) # work\input_dir
パスの結合については、以下のpathlibモジュールの「/」演算子を使用したケースも同じ仕様になる。
from pathlib import Path
p = Path("work")
path = p / "input_dir"
print(path) # work\input_dir
尚、パス作成以外にも共通した処理がosとpathlibには存在する。
パスの存在確認:os.path.exists(パス)
パスが存在するかどうかを判定する。
import os
# 存在するケース
path =os.path.join("work", "input_dir", "test01.zip")
print(os.path.exists(path)) # True
# 存在するケース
path2 =os.path.join("work", "input_dir", "sub_dir")
print(os.path.exists(path2)) # True
# 存在しないケース
path3 =os.path.join("work", "input_dir", "test01.txt")
print(os.path.exists(path3)) # False
パスがファイルか確認:os.path.isfile(パス)
指定したパスはファイルかどうか判定する。
import os
# フォルダ
path = os.path.join("work", "input_dir")
print(os.path.isfile(path)) # False
# ファイル
path2 = os.path.join("work", "input_dir", "test01.zip")
print(os.path.isfile(path2)) # True
パスがフォルダか確認:os.path.isdir(パス)
指定したパスはフォルダかどうか判定する。
import os
# フォルダ
path = os.path.join("work", "input_dir")
print(os.path.isdir(path)) # True
# ファイル
path2 = os.path.join("work", "input_dir", "test01.zip")
print(os.path.isdir(path2)) # False
指定したパス内の一覧を取得:os.listdir(パス)
指定したパス内のファイルまたはフォルダ名を一覧のリストで取得する。
import os
# input_dirフォルダ配下
path = os.path.join("work", "input_dir")
for name in os.listdir(path):
print(name)
#---------------------------
# 出力
#sub_dir
#test01.zip
# output_dirフォルダ配下
path2 = os.path.join("work", "output_dir")
for name in os.listdir(path2):
print(name)
#---------------------------
# 出力
#01.txt
#02.txt
#03.txt
#old
パス内のファイル、フォルダの表示:os.walk(パス)
指定したパスを親フォルダとして、その中に含まれるすべてのパス情報を取得する。
使用方法
for root, dirs, filesin
os.walk(パス)
:
・root変数:カレントフォルダ
・dirs変数:フォルダリスト
・files変数:ファイルリスト
import os
path = "work"
for root, dirs, files in os.walk(path):
print("フォルダパス表示:", root)
for dir in dirs:
print(" フォルダ表示:", dir)
for file in files:
print(" ファイル表示:", file)
#---------------------------------------------------
# 出力
#フォルダパス表示: work
# フォルダ表示: input_dir
# フォルダ表示: output_dir
#フォルダパス表示: work\input_dir
# フォルダ表示: sub_dir
# ファイル表示: test01.zip
#フォルダパス表示: work\input_dir\sub_dir
# ファイル表示: test01.txt
# ファイル表示: test02.txt
#フォルダパス表示: work\output_dir
# フォルダ表示: old
# ファイル表示: 01.txt
# ファイル表示: 02.txt
# ファイル表示: 03.txt
#フォルダパス表示: work\output_dir\old
# ファイル表示: 01.txt
# ファイル表示: 02.txt
サブフォルダ含めたファイル一覧を表示する方法は以下となる。
import os
def search_tree(target):
for root, dirs, files in os.walk(target):
for file in files:
print(root)
print(os.path.join(root, file))
def main():
search_tree("work")
if __name__ == "__main__":
main()
#---------------------------------------------------
# 出力
#work\input_dir
#work\input_dir\test01.zip
#work\input_dir\sub_dir
#work\input_dir\sub_dir\test01.txt
#work\input_dir\sub_dir
#work\input_dir\sub_dir\test02.txt
#work\output_dir
#work\output_dir\01.txt
#work\output_dir
#work\output_dir\02.txt
#work\output_dir
#work\output_dir\03.txt
#work\output_dir\old
#work\output_dir\old\01.txt
#work\output_dir\old
#work\output_dir\old\02.txt