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')
参考
参考にさせていただきました。
コメント