os ライブラリー
プログラムからシステム上のファイルやディレクトリーを操作できます。
メソッド一覧
・os.path.join(a, b) aとbを結合する(pathの結合)
・os.path.exists(パス名) (path名)が存在するか確認
・os.path.isfile(path) pathがファイルか判別する
・os.path.isdir(path) pathがディレクトリか判別する
・os.listdir(path) path内のファイル名と子ディレクトリを取得
・os.walk(path) path内の全ファイルとディレクトリーを取得
①pathの結合
os.path.join(a, b) aとbを結合する
①ファイルの存在確認
os.path.exists(パス名)
import os
def search(target_path, search_file):
path = os.path.join(target_path, search_file)
if os.path.exists(path):
print(path + "は存在します。")
else:
print(path + "は存在しません。")
if __name__ == '__main__':
search('input', 'a.txt')
search('input', 'b.txt')
os.path.join(target_path, search_file)を使いましょう。
理由は、パスの区切りがOS(Operating System)ごとに異なることがあるからです。
Pythonでパスの区切りは、os.sepで取得でき、下記のようになります。
Linuxの場合:'/'
Windowsの場合:r'\'
os.path.joinは、os.sepを使ってパスを組み立てます。
②ファイルかディレクトリーか判別
os.path.isfile(path)は指定したpathがファイルか判定します。
os.path.isdir(path)は指定したpathがディレクトリーか判定します。
import os
def search(target_path, search_file):
path = os.path.join(target_path, search_file)
if os.path.isfile(path):
print(path + "はファイルです。")
if os.path.isdir(path):
print(path + "はディレクトリーです。")
if __name__ == '__main__':
search('input', 'c')
search('input', 'd')
流れ
①ディレクトリを各ディレクトリとファイルまで1つずつ取得する必要がある
for filename in os.listdir(target_path):
②取得したファイルをカレントディレクトリとくっつけて絶対パスにすることでファイル名を作成する
file_path = os.path.join(target_path,filename)
③作成したファイルpath名が本当にファイル形式か確認する必要がある
④ファイルだったらファイルを開く
⑤in演算子で対象のテキスト名があるか判別する
⑥ファイル名を表示する
③os.listdir()はpathで指定されたディレクトリー(今回はinput)内のファイル名と子ディレクトリー名が入ったリストを返します。
os.listdir(path)
import os
def directory_list(target_path):
for name in os.listdir(target_path):
print(name)
if __name__ == '__main__':
directory_list('input')
④指定したファイル以下の全ファイルを取得する
os.walk(path)
import os
def directory_tree(target_path):
for root, dirs, files in os.walk(target_path):
print(root)
for drc in dirs:
print("\t", drc)
for file in files:
print("\t", file)
if __name__ == '__main__':
directory_tree('input')
https://pyq.jp/quests/os_walk/try/
⑤指定したフォルダの一覧を取得
os.listdirとos.path.joinを使う
import os
def directory_list(target_path):
for name in os.listdir(target_path):
path = os.path.join(target_path, name)
print(path)
if __name__ == '__main__':
directory_list('input/a')
⑥全ファイルを取得
import os
def directory_tree(target_path):
for root, dirs, files in os.walk(target_path):
for file in files:
path = os.path.join(root,file) ※rootとfileをos.path.joinでつなげるとpathを取得できる
print(path)
if __name__ == '__main__':
directory_tree('input')