Pythonでpathlibを使用したファイル操作

2 min read読了の目安(約1900字

はじめに

この記事はPythonでpathlibを使用した色々なファイル操作の方法を備忘録として残すことを目的に書きます。

この記事が他の人の参考になれば幸いです。
また、この記事の内容に間違った記載がありましたら、指摘していただけるとありがたいです。

環境

2021年01月13日時点。

名前 バージョン
macOS Big Sur 11.1
Python 3.9.0

pathlibとは

pathlibとは、Pythonの標準ライブラリでPurePathクラスとPathクラスが提供されており、クラスやインスタンスを通してファイルを操作することができます。
PurePathクラスはI/Oを伴わない読み取りのみの時に使用し、PathクラスはPurePathを継承しており、追加でファイルの作成などができます。
この記事ではPathクラスのみを取り上げます。

pathlibを使用するためにpathlibからPathクラスをインポートし、引数にパスを与えてインスタンスを作成します。
Pathクラスから作成されたインスタンスはOSの環境に応じてPosixPathWindowsPathになります。

from pathlib import Path

# Pathクラスのインスタンスの作成
current_path = Path('.')
absolute_path = Path('/etc')

# ホームディレクトリのインスタンスの作成
home_path = Path.home

# カレントディレクトリのインスタンスの作成
cwd_path = Path.cwd

パスの移動

/演算子でパスの移動ができます。文字列の他にもPathオブジェクトを使用できます。

p = Path('.')
q = Path('hoge')
hoge_p = p / 'hoge'
hoge_q = p / q

一般

p = Path('./hoge/sample')

# partsプロパティはパスの構成要素をタプルで返す
print(p.parts)  # => ('hoge', 'sample')

# resolveメソッドは絶対パスを返す
print(p.resolve())  # => /Users/sample/hoge/sample

# is_absoluteメソッドはパスが絶対パスかどうか調べる
print(p.is_absolute())  # => False
print(p.resolve().is_absolute())  # => True

# existsメソッドはパスが指すファイルかディレクトリが存在するか調べる
print(p.exists())  # => True

# is_fileメソッドはパスがファイルを指しているか調べる
print(p.is_file())  # => False

# is_dirメソッドはパスがディレクトリを指しているか調べる
print(p.is_dir())  # => True

# パスがディレクトリを指しているときに内容を返す
[print(child) for child in p.iterdir()]
# => hoge/sample/sample1.txt
#    hoge/sample/sample2.txt
#    hoge/sample/sample3.txt

ディレクトリを作成する

p = Path('./hoge/sample')
# 作成したいディレクトリのパス
new_dir_p = p / 'dir1'

# ディレクトリを作成する
new_dir_p.mkdir()

ファイル、ディレクトリを移動させる

p = Path('./hoge/sample/sample1.txt')
p.replace('./hoge/tmp/sample1.txt')

参考