はじめに
とあるフォルダからファイル名のみ取得したいシーンが有りました。
hoge/
└ huga/
├ file1.txt ←この file*.txt 達だけが欲しい
├ file2.txt
└ file3.txt
その作業記録として残しています。
方法1: glob と os.path.split を使う
glob でファイルパスを取得し、ファイルとそれ以外に split するという方法。
import glob
import os
for f in glob.glob('hoge/huga/*.txt'):
print(os.path.split(f)[1])
方法2: pathlib を使う
pathlib は Python3.4 から追加されたモジュール。
私は今回はこれを使いました。
import pathlib
p_temp = pathlib.Path('hoge/huga').glob('*.txt')
for p in p_temp:
print(p.name)
余談
実はこの pathlib を使って少しハマってしまいました。ハマったのは
glob モジュールの glob() はリストを返すが、pathlib の glob() はイテレータを返す
という点です。
私が書いた処理では、p_temp を使いまわしていたので、2回目以降は消えてしまっていました。
使いまわしたければ list() してやる必要がありました。
どっちもリストを返すだろうと思いこんでいたのがいけなかった…
p_temp = list(pathlib.Path('hoge/huga').glob('*.txt'))
参考
https://note.nkmk.me/python-pathlib-iterdir-glob/
(pathlibで詰まったときにこちらを読んで解決できました)