■ はじめに
Python での以下のようなことを扱える方法を調べてみた
目次
【1】フォルダ/ファイルの存在有無 【2】フォルダ/ファイルかどうか判定 【3】フォルダの作成 【4】フォルダ/ファイルのコピー 【5】フォルダ/ファイルの削除 【6】フォルダ/ファイルの移動、リネーム 【7】フォルダ配下のフォルダ/ファイル一覧 【8】パスの結合 【9】パスの分割(拡張子の取得・判定含む)
【1】 フォルダ/ファイルの存在有無
サンプル
例1:フォルダの有無
import os def main(): if os.path.exists('C:\\folderA'): print('ある') else: print('ない') if os.path.exists('C:\\folderA\\hello.txt'): print('ある') else: print('ない') if __name__ == '__main__': main()
【2】フォルダ/ファイルかどうか判定
フォルダかどうか
os.path.isdir() を使う
ファイルかどうか
os.path.isfile() を使う
例1:フォルダ/ファイルかどうか判定
import os def main(): input_path = 'C:\\work\\hello' if os.path.isdir(input_path): print("フォルダです") else: print("フォルダではない") input_file_path = 'C:\\work\\hello\\hello.txt' if os.path.isfile(input_file_path): print("ファイルです") else: print("ファイルではない") if __name__ == '__main__': main()
【3】フォルダの作成
makedirs(path[, exist_ok=True]) を使用する => 『exist_ok=True』はフォルダがあっても例外を発生しない
サンプル
例1:フォルダがなかったらフォルダ作成
import os def main(): path = 'C:\\work\\aaa\\bbb' if not os.path.exists(path): os.makedirs(path) # 補足:「exist_ok」ってのある # os.makedirs(path, exist_ok=True) if __name__ == '__main__': main()
【4】フォルダ/ファイルのコピー
ファイルコピー
import shutil shutil.copyfile("test1.txt", "clone_test1.txt")
https://python.softmoco.com/basics/python-file-copy-move.php
ディレクトリごとのコピー
* shutil.copytree(src, dst)
サンプル
from distutils.dir_util import copy_tree import shutil def main(): input_path = 'C:\\work\\hello' input_path2 = 'C:\\work\\hello_clone' copy_tree(input_path, input_path2) input_file_path = 'C:\\work\\hello\\hello.txt' input_file_path2 = 'C:\\work\\hello\\hello_clone.txt' shutil.copyfile(input_file_path, input_file_path2) if __name__ == '__main__': main()
【5】フォルダ/ファイルの削除
* フォルダ削除 shutil.rmtree(path) => 引数は、ディレクトリを示すパスのみ => ファイルだとエラー * ファイル削除 os.remove(file_path)
サンプル
例1:フォルダがあったらフォルダ削除
import os import shutil def main(): path = 'C:\\work\\aaa' if os.path.exists(path): shutil.rmtree(path) if __name__ == '__main__': main()
例2:ファイルがあったらファイル削除
import os def main(): file_path = 'C:\\work\\hello.txt' if os.path.exists(file_path): os.remove(file_path) if __name__ == '__main__': main()
【6】フォルダ/ファイルの移動、リネーム
* フォルダ/ファイルの移動 shutil.move(src, dst) * フォルダ/ファイルのリネーム os.rename(src, dst)
【7】 フォルダ配下のフォルダ/ファイル一覧
1) os.listdir(path) 2) os.walk(path) 3) glob.glob(path)
サンプル
例1:listdirを利用する
import os def main(): directoryList = os.listdir('C:\\folderA') print(directoryList) if __name__ == '__main__': main()
出力結果例
['.idea', 'git', 'hello.txt', 'folder2']
例2:walkを利用する
import os def main(): print('===================') for current_dir, dirs, files in os.walk( r"C:\folderA", topdown=False): print("現在のディレクトリ: " + current_dir) for dir in dirs: print("内包するディレクトリ:" + dir) for file in files: print("内包するファイル: " + file) if __name__ == '__main__': main()
例3:globを利用する
import glob for full_path in glob.glob(r"C:\tmp\aaa\*\*.csv"): print("現在のディレクトリ: " + full_path) path = os.path.dirname(full_path) print(" path = " + path) parent_dir_name = os.path.basename(path) print(" parent_dir_name = " + parent_dir_name) """ C:\tmp\aaa + bbb1 + ccc1_1 + ccc1 + ccc1_1.csv + bbb1_1.csv << Target + bbb1_2.csv << Target + bbb2 + ccc2 + ccc2_1.csv + bbb2_1.csv << Target + bbb2_2.txt + bbb3 + ccc3 + ccc3_1.csv + bbb2_1.txt + aaa1.csv """ # 現在のディレクトリ: C:\tmp\aaa\bbb1\bbb1_1.csv # path = C:\tmp\aaa\bbb1 # parent_dir_name = bbb1 # 現在のディレクトリ: C:\tmp\aaa\bbb1\bbb1_2.csv # path = C:\tmp\aaa\bbb1 # parent_dir_name = bbb1 # 現在のディレクトリ: C:\tmp\aaa\bbb2\bbb2_1.csv # path = C:\tmp\aaa\bbb2 # parent_dir_name = bbb2
【8】パスの結合
os.path.join(path1, path2, ...)
【9】パスの分割(拡張子の取得・判定含む)
* 以下の関連記事を参照のこと。
Python ~ 基本編 / パス情報抽出 ~
https://dk521123.hatenablog.com/entry/2022/02/23/000000
参考文献
https://qiita.com/supersaiakujin/items/12451cd2b8315fe7d054
https://akamist.com/blog/archives/3013
https://qiita.com/amowwee/items/e63b3610ea750f7dba1b
https://qiita.com/Morio/items/f34dab8825c9d76664f5
https://www.sejuku.net/blog/63816
関連記事
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / パス情報抽出 ~
https://dk521123.hatenablog.com/entry/2022/02/23/000000