この記事でわかること
- ファイル名(パス名含む)をディレクトリ(フォルダ)から取得
- ファイル名だけ取得
- ファイルの拡張子を取得
前提
次のファイル構成を例に説明します。
ファイル名(パス名含む)をディレクトリ(フォルダ)から取得
import glob
path = "hogehoge/*"
files = glob.glob(path)
for f in files:
print(f)
glob
というライブラリを利用します。pathにはディレクトリ名と「*」を入力します。今回は「hogehoge」がディレクトリで、その直下のファイルを取得します。
filesの中身は下記の通りで、files = ["hogehoge/4.txt", "hogehoge/3.txt", "hogehoge/2.txt", "hogehoge/1.txt"
]
print(f)の出力結果は次の通りになります。
hogehoge/4.txt
hogehoge/3.txt
hogehoge/2.txt
hogehoge/1.txt
一つ一つ取り出したかったらfiles[0]
みたいな形で[]で指定することで要素を取得することもできます。
ファイル名だけ取得
os.path.basename(ファイル名)
を利用します。先程のコードに追記すると、
import glob
path = "hogehoge/*"
files = glob.glob(path)
for f in files:
print(os.path.basename(f))
このようになり、出力結果は次の通りです。
4.txt
3.txt
2.txt
1.txt
os.path.basename(ファイル名(パスを含む))
のファイル名にはファイル名だけでなくディレクトリ名を含んだものを入力します。
「hogehoge/4.txt」を例にとると、
os.path.basename("hogehoge/4.txt") -> 4.txt
のように出力されます。
ファイルの拡張子を取得
os.path.splitext(ファイル名)
を利用します。先程のコードにさらに追記すると、
import glob
path = "hogehoge/*"
files = glob.glob(path)
for f in files:
filename = os.path.basename(f)
path2, ext = os.path.splitext(filename)
print(path2, ext)
このようになり、出力結果は次の通りです。
('4', '.txt')
('3', '.txt')
('2', '.txt')
('1', '.txt')
os.path.splitext(ファイル名)
では入力されたファイル名を拡張子と拡張子以外にわけることができます。今回os.path.basename()
でファイル名を取得してからそれを入力としましたが、f
を直接入力すると、出力は次の通りになります。
('hogehoge/4', '.txt')
('hogehoge/3', '.txt')
('hogehoge/2', '.txt')
('hogehoge/1', '.txt')
おわりに
僕はpythonでファイルを加工して別名で保存したいときにこれらの方法をよく使います。元の名前を少し変えて保存ができたりするのですごく便利です。是非使ってみてください。