【osモジュール】osを使用してファイルやフォルダを操作する方法

概要

osモジュールを使用すると、とOSに依存する機能を可能な限り同一の書き方で同一の機能を利用可能。
OSに依存するケースとしては例えば以下がある。

・Windows:‘\’
・Linux:‘/’

上記のようなOSに依存する差異をosモジュールは吸収する。

 

前提

フォルダ構成は以下とする。

 

【osモジュール】フォルダ構成
▲Python実行ファイルはosまわり.ipynb

 

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

 
あわせて読みたい

概要 ファイルやディレクトリを操作するpathlibの使用方法について紹介する。Pathオブジェクトを作成して、ファイルまたはフォルダを操作する。   前提 フォルダ構成は以下とする[…]

【pathlib】Pythonでファイル操作:pathlibモジュールの基本的な使用方法

尚、パス作成以外にも共通した処理が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.txt
#work\output_dir
#work\output_dir.txt
#work\output_dir
#work\output_dir.txt
#work\output_dir\old
#work\output_dir\old.txt
#work\output_dir\old
#work\output_dir\old.txt 

 

スポンサーリンク