46
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonでフォルダ内のファイル名のみ取得する方法

Last updated at Posted at 2019-04-06

はじめに

とあるフォルダからファイル名のみ取得したいシーンが有りました。

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で詰まったときにこちらを読んで解決できました)

46
42
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?