プログラミング勉強の備忘録

主にpythonやスマホアプリを作るためのプログラミングで勉強した内容を忘れないように記載していきます。

【Python】ファイルやフォルダ名の操作や検索

この記事では、ディレクトリやファイルに関連した内容について記載していきます。
実施時の環境は以下です。

【一覧】

この記事に記載する処理について、使用するライブラリ毎に、一覧にまとめておきます。
今回使用するライブラリはPythonに標準的にあるライブラリのため、インストールは不要です。

ライブラリ:os.path

コード 説明
basename() ファイル名の取得
dirname() ディレクトリを取得
split() ディレクトリとファイル名に分割
splitext() ファイル名と拡張子に分割
join() 文字列をパス形式で結合
exists() パスが存在するか確認
isfile() ファイルが存在するか確認
isdir() ディレクトリが存在するか確認

ライブラリ:glob

コード 説明
glob() フォルダ内のファイルをリストで取得

【コードの説明】

ライブラリ:os.path

以下のコードはライブラリ「os.path」にある処理なので、使用する際は「os.path」をインポートしてください。

basename()

「basename」ファイルパスからファイル名を取得します。
使い方は下記の様に、引数にパスを渡すと、ファイル名が返されます。

import os.path

path = 'D:\\python\\testdir\\test.txt'

file_name = os.path.basename(path)
# file_name >> test.txt
dirname()

「dirname」はファイルパスからディレクトリ部分のパスを取得します。
使い方は下記の様に、引数にパスを渡すと、ディレクトリ部分が返されます。

import os.path

path = 'D:\\python\\testdir\\test.txt'

dir_name =  os.path.dirname(path)
# dir_name >> D:\python\testdir
split()

「split」はファイルパスをディレクトリとファイル名に分割したものを取得します。
使い方は下記の様に、引数にパスを渡すと、ディレクトリとファイル名が返されます。

import os.path

path = 'D:\\python\\testdir\\test.txt'

dir_file = os.path.split(path)
# dir_file >> ('D:\\python\\testdir', 'test.txt')
splitext()

「splitext」はファイルパスをファイル名(ディレクトリを含む)と拡張子に分割したものを取得します。
使い方は下記の様に、引数にパスを渡すと、ファイル名と拡張子が返されます。

import os.path

path = 'D:\\python\\testdir\\test.txt'

file_ext = os.path.splitext(path)
# file_ext >> ('D:\\python\\testdir\\test', '.txt')
join()

「join」は引数をパス形式で結合したものを取得します。
使い方は下記の様に、引数に文字列を渡すと、1つのパス形式が返されます。

import os.path

dir_name = 'D:\\python\\testdir'
file_name = 'test.txt'

path = os.path.join(dir_name, file_name)
# path >> D:\python\testdir\test.txt

渡す引数は、2つ以上であればいくつでも大丈夫です。

import os.path

dir_name_1 = 'D:\\python'
dir_name_2 = 'testdir'
file_name = 'test.txt'

path = os.path.join(dir_name_1, dir_name_2, file_name)
# path >> D:\python\testdir\test.txt
exists()

「exists」は引数のパス先が存在する場合「True」しないときは「False」を取得します。
使い方は下記の様に、引数にパスを渡すと、「True」or「False」が返されます。

import os.path

path = 'D:\\python\\testdir\\test.txt'
exist = os.path.exists(path)
# exist >> False

上記の例は存在しない場合です。

isfile()

「isfile」は引数のパス先のファイルが存在する場合「True」しないときは「False」を取得します。
使い方は下記の様に、引数にパスを渡すと、「True」or「False」が返されます。

import os.path

path = 'D:\\python\\testdir\\test.txt'

exist = os.path.isfile(path)
# exist >> True

上記の例は存在する場合です。

また、ファイルの存在を確認するため、ディレクトリを渡すと「False」になります。
下記の例では、フォルダは存在しますが、「False」が返されています。

path = 'D:\\python\\testdir'

exist = os.path.isfile(path)
# exist >> False
print(f'exist >> {exist}')
isdir()

「isdir」は引数のパス先のディレクトリが存在する場合「True」しないときは「False」を取得します。
使い方は下記の様に、引数にパスを渡すと、「True」or「False」が返されます。

import os.path

path = 'D:\\python\\testdir'

exist = os.path.isdir(path)
# exist >> True

上記の例は存在する場合です。
「isfile」とは逆で、ファイルパスを引数にするとFalse」になります。
下記の例では、フォルダは存在しますが、「False」が返されています。

import os.path

path = 'D:\\python\\testdir\\test.txt'

exist = os.path.isdir(path)
# exist >> False

ライブラリ:glob

以下のコードはライブラリ「glob」にある処理なので、使用する際は「glob」をインポートしてください。

glob()

「glob」はフォルダ内のファイルやフォルダ名をリストで取得します。
フォルダ内のみを取得する方法と、再帰的にサブフォルダを含めて検索する方法があります。

フォルダ内のみの取得方法が下記です。
検索したいフォルダに「\\*」をつけて引数にすると、フォルダ内のフォルダとファイルを全て取得して、リストを返します。

import glob

path = 'D:\\Python\\testdir'

file_list = glob.glob(path + '\\*')
# file_list >> ['D:\\Python\\testdir\\aaa', 'D:\\Python\\testdir\\test.txt']


フォルダ内のサブフォルダを含めた取得方法が下記です。
検索したいフォルダに「\\**」をつけて引数にし、「recursive=True」にするとサブフォルダを含めたフォルダ内内のフォルダとファイルを全て取得して、リストを返します。

import glob

path = 'D:\\Python\\testdir'

file_list = glob.glob(path + '\\**', recursive=True)
# file_list >>  ['D:\\Python\\testdir\\', 'D:\\Python\\testdir\\aaa', 'D:\\Python\\testdir\\aaa\\bbb.txt', 'D:\\Python\\testdir\\test.txt']

【参考サイト】

今回の記事の作成にあたり、下記サイトを参考にさせて頂きました。
note.nkmk.me
www.gesource.jp
note.nkmk.me