あくまで、初心者がメモしたもので、使っているわけではないです。
- python 3.4以前ならos.walk
-
- glob
- 相対パスでも指定可能
- 絶対パスで指定した場合は絶対パスを返す
- 相対パスは os.path.abspath で絶対パスへ変換
- '*', '?', '[]' のワイルドカードが使える
- ワイルドカードで「xxxを含まない」はできない
- 再帰的検索は、 glob.glob("/test_dir/**.txt", recursive=True)
-
- python 3.4以降、 pathlib が標準ライブラリに追加された。
- open など python 標準の関数では、文字列の代わりにPathオブジェクトが使える。
- 外部ライブラリでは、受け付けないものがあるらしい。
- Pathオブジェクトの文字列への変換は、 Path.as_posix() とか str(Path)
- 基本的な使い方
from pathlib import Path # from pathlib import PosixPath # from pathlib import PurePath # これは具象パス(Posixかwindowsのどちらか)になる # pure_path = PurePath(c_path) # posix_path = PosixPath(c_path) logger.info(Path.cwd()) # 現在のパス logger.info(PurePath()) # 現在のパス `.` logger.info(Path.home()) # ホームディレクトリのパス logger.info(Path('~/work/test').expanduser()) # ~ および ~user を展開 # cd が出来ないみたい。 os.chdir(Path('~/Documents/proj/gpxs').expanduser()) c_path = Path.cwd() p_path = c_path.relative_to('/home/') # 絶対パスから相対パス logger.info(c_path) logger.info(c_path.parts) # パスの構成要素(タプル) logger.info(p_path) logger.info(p_path.parts) c_files = c_path.iterdir() # logger.info([x for x in c_path.iterdir() if x.is_dir()]) logger.info([x for x in c_path.iterdir() if x.is_file()]) c_files = c_path.glob("tes*.dat") # c_flist = list(c_path.glob("**/tes*.dat")) # 相対だとglobが使えない logger.info(c_files) logger.info(c_flist) # for c_f in c_flist: for c_f in c_path.glob("tes*.dat"): logger.info(str(c_f)) logger.info(c_f.root) # ローカルまたはグローバルルート。あれば。 logger.info(c_f.parent) # 親ディレクトリ parents[0] logger.info(list(c_f.parents)) # 親ディレクトリ(list) # 最後がスラッシュなら、ファイル名が空として扱われる """[PosixPath('/home/hogehoge/Documents/proj/mp4tomp3'), PosixPath('/home/hogehoge/Documents/proj'), PosixPath('/home/hogehoge/Documents'), PosixPath('/home/hogehoge'), PosixPath('/home'), PosixPath('/')]""" logger.info(c_f.name) # ローカルまたはグローバルルート。あれば。 logger.info(c_f.stem) # name から suffix を取る logger.info(c_f.suffix) # ピリオドを含む logger.info(c_f.suffixes) # logger.info(c_f.suffixes[-1]) # logger.info(c_f.exists()) # logger.info(c_f.match("/proj")) # # logger.info(c_f.isfile()) # logger.info(c_f.stat()) """ os.stat_result(st_mode=33188, st_ino=2755182, st_dev=2054, st_nlink=1, st_uid=1001, st_gid=1001, st_size=5764, st_atime=1528063195, st_mtime=1516928971, st_ctime=1516933101) """ logger.info(c_f.stat().st_mode) logger.info(c_f.stat().st_size) logger.info(c_f.stat().st_mtime) logger.info(Path.chmod(mode)) # os.chmod() のようにファイルのモードとアクセス権限 c_f.chmod(0o644) logger.info(c_f.with_name("hogetest.dat")) # change name logger.info(c_f.with_suffix(".json")) # ピリオドが必要 c_p = c_f.parent / "testdir" c_p = c_f.parent.joinpath("testdir") logger.info(c_p.is_dir()) # c_p.mkdir(parents=False, exist_ok=True) c_p.rmdir() o_file = open(c_f, 'r') o_file.close() c_f.unlink() # delete c_f # mv c_file new_file c_file.rename(new_file) # cp c_file new_file new_file.write_bytes(c_file.read_bytes()) # for bin files new_file.write_text(c_file.read_text()) # for text files # newest file in c_path m_time, file_path = max((f.stat().st_mtime, f) for f in c_path.iterdir()) m_time, file_path = max((f.stat().st_mtime, f) for f in c_path.glob('*.dat'))