S-JIS[2021-04-06] 変更履歴
Python3.6.4のファイル操作のメモ。
ファイルを開くopen関数等には、パスを渡す。
このパスには文字列(str)の他、Pathオブジェクト(Python3.4以降)が使える。(JavaのFileクラスやPathクラスに相当する)
from pathlib import Path
path1 = "/tmp/zzz.txt"
path2 = Path("/tmp/zzz.txt")
Pathクラスの実体は、Windows用やUNIX用に分かれている。
パスを文字列で扱う場合、パスの操作はos.pathモジュールのメソッドで行う。
import os
Pathオブジェクトの場合はPathのメソッドで操作する。
from pathlib import Path
パスだけを扱う(ファイルシステムにはアクセスしない)場合は、PurePathオブジェクトを使用することも出来る。
from pathlib import PurePath
Python3.6から、os.pathの各メソッドの引数に文字列だけでなくPathLikeオブジェクト(PathやPurePath)も指定できるようになったらしい。
| 例 | 説明 | Java相当 | ||||
|---|---|---|---|---|---|---|
| 文字列(str) | Pathオブジェクト PurePathオブジェクト  | 
		Fileクラス | Pathクラス | |||
| パス生成 | path = "/tmp" | 
		path = Path("/tmp") | 
		var file = new File("/tmp"); | 
		var path = Path.of("/tmp"); | 
	||
| パス結合 | os.path.join("/tmp", "zzz") | 
		Path("/tmp", "zzz") | 
		new File("/tmp", "zzz"); | 
		Path.of("/tmp", "zzz"); | 
	||
| 親ディレクトリー取得 | os.path.dirname("/tmp/zzz.txt") | 
		Path("/tmp/zzz.txt").parent | 
		パスの親ディレクトリーを取得する。 | file.getParentFile() // File | 
		path.getParent() | 
	|
| ファイル名取得 | os.path.basename("/tmp/zzz.txt") | 
		Path("/tmp/zzz.txt").name | 
		パスの末尾を取得する。 | file.getName() // String | 
		path.getFileName() | 
	|
| ファイル名置換 | Path("/tmp/src.txt").with_name("dst.txt") | 
		|||||
| 親ディレクトリー・ファイル名取得 | dir, base = 
		os.path.split("/tmp/zzz.txt") | 
		パスの親ディレクトリーと末尾を同時に取得する。 | ||||
| ドライブ取得 | drive, tail = 
		os.path.splitdrive("D:/tmp") | 
		drive = Path("D:/tmp").drive | 
		Windowsのドライブ(と残りのパス)を取得する。 | |||
| 拡張子取得 | base, ext = 
		os.path.splitext("/tmp/zzz.txt") | 
		ext = Path("/tmp/zzz.txt").suffix | 
		拡張子を取得する。 | |||
exts = Path("zzz.tar.gz").suffixes | 
		||||||
| 拡張子置換 | Path("/tmp/zzz.txt").with_suffix(".gz") | 
		|||||
| 拡張子除去 | Path("/tmp/zzz.tar.gz").stem | 
		|||||
| 共通パス取得 | os.path.commonpath(["/tmp/11", "/tmp/12"]) | 
		3.5 | ||||
| 共通接頭辞取得 | os.path.commonprefix(["/tmp/11", 
		"/tmp/12"]) | 
		|||||
| 相対パス取得 | os.path.relpath("/tmp/11", "/tmp") | 
		Path("/tmp/11").relative_to("/tmp") | 
		相対パスを取得する。 | Path.of("/tmp").relativize(Path.of("/tmp/11")) | 
	||
| 環境変数展開 | os.path.expandvars("$TMP/zzz") | 
		環境変数を展開する。 「 $環境変数名」「${環境変数名}」が変換可能。Windowsの場合は「 %環境変数名%」も変換可能。 | 
		||||
| POSIX化 | Path("D:\\tmp").as_posix() | 
		パス区切り文字を「/」に変換する。 | ||||
| URI取得 | Path("D:/tmp").as_uri() | 
		new File("D:/tmp").toURI() | 
		||||
| 例 | 説明 | Java相当 | ||||
|---|---|---|---|---|---|---|
| 文字列(str) | Pathオブジェクト | Fileクラス | Pathクラス | |||
| 正規化かつ絶対パス取得 | os.path.abspath(".") | 
		Path(".").resolve() | 
		||||
| 絶対パス取得 | file.getAbsoluteFile() // File | 
		path.toAbsolutePath() | 
	||||
| 正規化パス取得 | os.path.normpath("/tmp/..") | 
		file.getCanonicalFile() // File | 
		path.normalize() | 
	|||
| カレントディレクトリー取得 | os.getcwd() | 
		Path.cwd() | 
		||||
| ホームディレクトリー取得 | Path.home() | 
		3.5 | System.getProperty("user.home") | 
	|||
| ホームディレクトリー展開 | os.path.expanduser("~/bin") | 
		Path("~/bin").expanduser() | 
		3.5 | 「~」「~ユーザー名」を展開する。 | 
		||
| 環境変数展開 | os.path.expandvars("$TMP/zzz") | 
		環境変数を展開する。 「 $環境変数名」「${環境変数名}」が変換可能。Windowsの場合は「 %環境変数名%」も変換可能。 | 
		||||
| ファイル存在確認 | os.path.exists("/tmp") | 
		Path("/tmp").exists() | 
		file.exists() | 
		Files.exists(path) | 
	||
| ファイルサイズ取得 | os.path.getsize("/tmp/zzz.txt") | 
		Path("/tmp/zzz.txt").stat().st_size | 
		file.length() | 
		Files.size(path) | 
	||
| 作成日時取得 | import time | 
		os.path.getXtimeはエポック秒を返す。 | ||||
| 更新日時取得 | os.path.getmtime("/tmp/zzz.txt") | 
		new java.util.Date(file.lastModified()) | 
		Files.getLastModifiedTime(path) | 
	|||
| 最終アクセス日時取得 | os.path.getatime("/tmp/zzz.txt") | 
		|||||
| 絶対パスかどうか | os.path.isabs("/tmp") | 
		Path("/tmp").is_absolute() | 
		file.isAbsolute() | 
		path.isAbsolute() | 
	||
| ファイルかどうか | os.path.isfile("/tmp/zzz.txt") | 
		Path("/tmp/zzz.txt").is_file() | 
		file.isFile() | 
		Files.isRegularFile(path) | 
	||
| ディレクトリーかどうか | os.path.isdir("/tmp") | 
		Path("/tmp").is_dir() | 
		file.isDirectory() | 
		Files.isDirectory(path) | 
	||
| シンボリックリンクかどうか | os.path.islink(path) | 
		path.is_symlink() | 
		Files.isSymbolicLink(path) | 
	|||
| 同一ファイルかどうか | os.path.samefile(path1, path2) | 
		path1.samefile(path2) | 
		Files.isSameFile(path1, path2) | 
	|||
| 例 | 説明 | Java相当 | |||
|---|---|---|---|---|---|
| 文字列(str) | Pathオブジェクト | Fileクラス | Pathクラス | ||
| ファイル名変更 | os.rename("src", "dst") | 
		Path("src").rename("dst") | 
		new File("src").renameTo(new File("dir")); | 
		Files.move(Path.of("src"), Path.of("dst")); | 
	|
| ファイル削除 | os.remove("zzz.txt") | 
		Path("zzz.txt").unlink() | 
		new File("zzz.txt").delete(); | 
		Files.delete(Path.of("zzz.txt")); | 
	|
| ディレクトリー作成 | os.mkdir("/tmp/zzz") | 
		Path("/tmp/zzz").mkdir() | 
		new File("/tmp/zzz").mkdir(); | 
		Files.createDirectory(Path.of("/tmp/zzz")); | 
	|
os.mkdirs("/tmp/zzz/11") | 
		Path("/tmp/zzz/11").mkdir(parents=True) | 
		new File("/tmp/zzz/11").mkdirs(); | 
		Files.createDirectories(Path.of("/tmp/zzz/11")); | 
	||
| ディレクトリー削除 | os.rmdir("/tmp/zzz") | 
		Path("/tmp/zzz").rmdir() | 
		new File("/tmp/zzz").delete(); | 
		Files.delete(Path.of("/tmp/zzz")); | 
	|
| ファイル一覧取得 | for name in os.listdir("/tmp"): | 
		||||
with in
		os.scandir("/tmp") as it: | 
		for path in Path("/tmp").iterdir(): | 
		new File("/tmp").listFiles() | 
		Files.list(Path.of("/tmp")) | 
	||
for root, dirs, files in
		os.walk("/tmp"): | 
		for path in Path("/tmp").glob("**/*"): | 
		再帰的に取得する。 | Files.walk(Path.of("/tmp")) | 
	||