Pythonでファイル・ディレクトリ操作

[最終更新] 2018年1月19日

pythonでファイルやディレクトリを扱うときに個人的によく使う操作。よく使う割によく忘れて毎回調べてしまっている…。ので、メモ。なおPython 3.6。

以下、osとshutilをインポートしつつ。「11.2. os.path — 共通のパス名操作 — Python 3.6.3 ドキュメント」とか見つつ。

スポンサーリンク

ファイル

f = ‘hoge/hoge1/hoge2/hogehoge.txt’ があるとして。

ファイルのパスの作成

os.path.join(path)

プラットフォームによる差も吸収できる。

>>> f = os.path.join('hoge','hoge1','hoge2','hogehoge.txt')
>>> f
'hoge/hoge1/hoge2/hogehoge.txt'

ディレクトリ名を省いてファイル名のみ取得

os.path.basename(path)

>>> os.path.basename(f)
'hogehoge.txt'

拡張子の抽出、削除

os.path.splitext(path)

os.path.splitext(f)
('hoge/hoge1/hoge2/hogehoge', '.txt')

タプルで返る。name, ext = os.path.splitext(f) とすれば、nameに名前、extに拡張子が.から入る。

ファイルの存在確認

os.path.exists(path)

a.csv があるとする。

>>> os.path.exists('a.csv')
True

ファイルをコピーする

shutilをインポート。

shutil.copyfile(src, dst)

a.csvをc.csvという名前でコピーしてみる。

>>> shutil.copyfile('a.csv', 'c.csv')
'c.csv'
>>> os.path.exists('c.csv')
True

ファイルの削除

os.remove(path)

c.csv を消してみる。

>>> os.path.exists('c.csv')
True
>>> os.remove('c.csv')
>>> os.path.exists('c.csv')
False

ディレクトリ

f = ‘hoge/hoge1/hoge2/hogehoge.txt’ があるとして。

ディレクトリ名を調べる

os.path.dirname(path)

>>> os.path.dirname(f)
'hoge/hoge1/hoge2'

ディレクトリの有無を調べる

os.path.isdir(path)

>>> os.path.isdir(f)
False

存在すればTrueが返る。

ディレクトリを作成する

os.makedirs(path)

階層構造を持った状態で作ることができる。階層無しは os.mkdir(path)

>>> os.makedirs(f)
>>> os.path.isdir(f)
True

.txtなディレクトリになるがサンプルなので気にしない。

ディレクトリからファイル名一覧を取得

os.listdir(path)

ディレクトリ部分を除いたファイル名だけ配列で返る。

>>> os.listdir('.')
['a.csv', 'data', 'format.csv', 'hoge']

フルパスならglob。

>>> import glob
>>> glob.glob('./*')
['./a.csv', './data', './format.csv', './hoge']

再帰的に走査する場合はos.walk()を使う。

for root, dirs, files in os.walk('.'):
    print(root)
    print(dirs, 'dirs')
    print(files, 'files')

参考

参考にさせていただきました。

関連コンテンツ

関連記事

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。