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")) |