Closed6
Python3_pathlibモジュール, tempfileモジュール, shutilモジュール
Python実践レシピより
Python3エンジニア認定実践試験メモ
純粋パス
main.py
"""
フォルダ構成
./dir1/dir2/dir3/
├ hoge.txt
├ fuga.txt
├ piyo.txt
"""
from pathlib import Path, PurePath
#==========
# 純粋パス(I/Oの伴わない機能を提供)
pp1 = PurePath("./dir1/dir2/dir3/hoge.txt")
print(pp1)
# dir1/dir2/dir3/hoge.txt
# 複数のパスを連結
pp2 = PurePath("dir1", "dir2", "dir3", "fuga.txt")
print(pp2)
# dir1/dir2/dir3/fuga.txt
# / で連結
dir1 = PurePath("dir1")
dir2 = PurePath("dir2")
dir3 = PurePath("dir3")
pp3 = dir1 / dir2 / dir3 / PurePath("piyo.txt")
print(pp3)
# dir1/dir2/dir3/piyo.txt
# 各要素を取得
print(pp3.parts)
# ('dir1', 'dir2', 'dir3', 'piyo.txt')
# 絶対パスか
print(pp3.is_absolute())
# False
# パターンに一致するか
print(pp3.match("*.txt"))
# True
# 上位パス
print(pp3.parent)
# dir1/dir2/dir3
# 末尾の名前
print(pp3.name)
# piyo.txt
# 末尾の拡張子
print(pp3.suffix)
# .txt
# 末尾の拡張子を除いたもの
print(pp3.stem)
# piyo
# パスのnameを引数で渡したものに変更したパスにして返す
print(pp3.with_name("uhyo.txt"))
# dir1/dir2/dir3/uhyo.txt
print(pp3.with_suffix(".json"))
# dir1/dir2/dir3/uhyo.json
print(pp3.with_stem("uhya"))
# dir1/dir2/dir3/uhya.txt
具象パス
main.py
"""
フォルダ構成
./dir1/dir2/dir3/
├ hoge.txt
├ fuga.txt
├ piyo.txt
"""
from pathlib import Path, PurePath
#==========
# 具象パス(I/Oの伴う機能を提供)
# 現在のディレクトリ
print(Path.cwd())
# /Users/xxx/yyy/zzz
# ホームディレクトリ
print(Path.home())
# /Users/xxx
# 存在を確認
cp1 = Path("./dir1/dir2/dir3/hoge.txt")
print(cp1.exists())
# True
cp2 = Path("./dir1/dir2/dir3/uhyo.txt")
print(cp2.exists())
# False
# ファイルかどうか
print(cp1.is_file())
# True
# ディレクトリかどうか
print(cp1.is_dir())
# False
# ファイル/ディレクトリを作成する
cp3 = Path("./dir1/dir2/dir3/poyo.txt")
cp3.touch(exist_ok=True)# ファイル
#cp3.mkdir(exist_ok=True)# ディレクトリ
# ファイルに書き込み
cp3.write_text("This is poyo.txt!!")
# ファイルの内容を確認
print(cp3.read_text())
# ファイル/ディレクトリを削除
cp3.unlink(missing_ok=True)# ファイル
#cp3.rmdir()# ディレクトリ(空である必要がある)
一時的なファイルを作る(ファイルシステム上に存在するとは限らない)
main.py
import tempfile
from pathlib import Path
#==========
# 一時的なファイルを作る(ファイルシステム上に存在するとは限らない)
tmp_file = tempfile.TemporaryFile()
print(tmp_file)
# <_io.BufferedRandom name=3>
# ファイルを閉じる
tmp_file.close()
一時的なファイルを作る(ファイルシステム上に存在する)
main.py
import tempfile
from pathlib import Path
#==========
# 一時的なファイル(ファイルシステム上に存在する)
tmp_named = tempfile.NamedTemporaryFile()
print(tmp_named)
# <tempfile._TemporaryFileWrapper object at 0x10e243620>
# パス
p = Path(tmp_named.name)
print(p.exists()) # ファイルが存在している
# True
# ファイルを閉じる
tmp_named.close()
print(p.exists()) # ファイルが削除されている
# False
一時的なディレクトリを作る
main.py
import tempfile
from pathlib import Path
tmp_dir = tempfile.TemporaryDirectory()
print(tmp_dir)
# <TemporaryDirectory '/var/folders/xxx/T/tmppa5lpxr7'>
# パス
d = Path(tmp_dir.name)
print(d.exists()) # ディレクトリが存在している
# True
# ファイルを作る
f1 = d / "hoge.txt"
f1.touch()
print(f1.exists())
# True
f2 = d / "fuga.txt"
f2.touch()
print(f2.exists())
# True
f3 = d / "piyo.txt"
f3.touch()
print(f3.exists())
# True
# 一時ディレクトリを削除
tmp_dir.cleanup()
print(f1.exists())
print(f2.exists())
print(f3.exists())
# False
# False
# False
shutilモジュール
main.py
"""
フォルダ構成
./from
├ hoge.txt
├ fuga.txt
├ piyo.txt
./to
├
"""
import shutil
from pathlib import Path
# ファイルをコピー
shutil.copy("./from/hoge.txt", "./to/a.txt")
#shutil.copy("./from/hoge.txt", "./to/")# ディレクトリを指定
p = Path("./from/a.txt")
print(p.exists())
# True
# ファイルのコピー(メタデータもコピーする)
shutil.copy2("./from/fuga.txt", "./to/b.txt")
#shutil.copy2("./from/fuga.txt", "./to/")# ディレクトリを指定
p = Path("./from/b.txt")
print(p.exists())
# True
# 指定ディレクトリを再起的にコピー
ignore = shutil.ignore_patterns("*.csv", "*.json")
shutil.copytree("./from", "./other",
ignore=ignore, dirs_exist_ok=True)
このスクラップは2ヶ月前にクローズされました