Python|ファイル名 取得 自身 拡張子なし pathlib 一覧 リスト glob サブフォルダ

C:/Downloads
├ photo.jpg
├ data.csv
├ demo.csv
├ test.csv
└ /subfolder
  └ addr.csv
import os
import glob
filepath = 'C:/Downloads'
files = glob.glob(filepath + '/*.csv')
for file in files:
    filename = os.path.basename(file)
    print(filename)
data.csv
demo.csv
test.csv

上のサンプルプログラムは、フォルダ内のCSVファイルのみを取得して、for文でファイル名を表示する処理をしています。

ファイル名 取得 自分 自身

__file__

C:/pysuki/sample.py
#sample.py
fileself = __file__
print(fileself)
C:\pysuki\sample.py

Pythonでは、ファイル自身は __file__ です。

filename = os.path.basename(__file__)
print(filename)
sample.py

os.path.basename()を組み合わせるとファイル名を取得できます。

ファイル名 取得 os.path

os.path.basename(path)

import os
filepath = 'C:/Downloads/data.csv'
filename = os.path.basename(filepath)
print(filename)
data.csv

ファイル名は、os.path.basename()で取得できます。

パスの区切りは、次のどれかのように書くことができます。

  • r'C:\test.csv'
  • 'C:\\text.csv'
  • 'C:/test.csv'

os.path.split(path)

import os
filepath = 'C:/Downloads/data.csv'
filename = os.path.split(filepath)[-1]
print(filename)
data.csv

os.path.split()でもファイル名を取得できます。

basename()を使うほうが明示的です。

ファイル名のみ 取得 拡張子なし

os.path.splitext(path)

import os
filepath = 'C:/Downloads/demo.csv'
filename = os.path.splitext(os.path.basename(filepath))[0]
print(filename)
demo

ファイル名のみは、os.path.splitext()を合わせて使うことで取得できます。

import os
filepath = 'C:/Downloads/demo.csv'
filename = os.paht.basename(filepath)
filenames = os.path.splitext(filename)
print(filenames)
(‘demo’, ‘.csv’)

splitextは、拡張子(extension)を分割(split)する関数です。

上の例では、ファイル名’demo.csv’を分割してタプルで返します。

 [0]    [1]
(‘demo’, ‘.csv’)

[0]を指定すると、タプルの先頭のみ‘demo’を取得することになります。

ファイル名 取得 pathlib

pathlib.Path(path).name

import pathlib
filepath = 'C:/Downloads/test.csv'
filename = pathlib.path(filepath).name
print(filename)
test.csv

pathlibモジュールを使うときは、.nameで取得できます。

ファイル名 取得 一覧 リスト

os.listdir(path)

C:/Users/Downloads
├ photo.jpg
├ data.csv
├ demo.csv
├ test.csv
└ /subfolder
  └ addr.csv
import os
folder = 'C:/Users/Downloads'
files = os.listdir(folder)
print(files)
[‘photo.jpg’, ‘data.csv’, ‘demo.csv’, ‘test.csv’, ‘subfolder’]

os.listdir()を使うと、フォルダのなかにあるファイルをリスト(一覧)で取得できます。

ファイル名 取得 glob 一覧 リスト

glob.glob(pathname)

C:/Users/Downloads
├ photo.jpg
├ data.csv
├ demo.csv
├ test.csv
└ /subfolder
  └ addr.csv
import glob
filedir = 'C:/Users/Downloads'
files = glob.glob(filedir+'/*.csv')
print(files)
[‘C:/Users/Downloads\\data.csv’, ‘C:/Users/Downloads\\demo.csv’, ‘C:/Users/Downloads\\test.csv’]

glob.glob()を使うと、指定した拡張子のファイルをリスト(一覧)で取得できます。

import glob
filedir = 'C:/Users/Downloads'
files = glob.glob(filedir+'/**/*.csv', recursive=True)
print(files)
[‘C:/Users/Downloads\\data.csv’, ‘C:/Users/Downloads\\demo.csv’, ‘C:/Users/Downloads\\test.csv’, ‘C:/Users/Downloads\\subfolder\\addr.csv’]

サブフォルダ(下層フォルダ)のファイルを再帰的に取得することもできます。

タイトルとURLをコピーしました