Python

ファイル / フォルダ 指定方法【 Python os glob 】

k.w

Python に限らず、 ファイル や フォルダ を参照することが必ずあります。Pyhonでは、容易に指定したファイルパスを参照し、ファイルをコントロールするライブラリがあります。標準ライブラリの os や 複数ファイルを扱う glob など紹介したいと思います。

スポンサーリンク

カレントワーキングディレクトリの理解から

プログラムを実行する時の基準になるフォルダを、カレントワーキングディレクトリ(カレントディレクトリ/ワーキングディレクトリ)と言います。(以下カレントディレクトリ)

ファイルを開いたり、フォルダを渡り歩いたりする際の起点となるフォルダです。

カレントディレクトリと同じフォルダにある、各種ファイルは、ファイルパスを指定せずに、処理(開く・書き込み・削除など)が可能です。

ただ、実際は、インプットファイルやアウトプットファイルなどは、異なるフォルダ(子フォルダや別ドライブ)にある場合がほとんどではないでしょうか?

異なるフォルダに存在するファイルやフォルダを意識しながらプログラミングは必要になるのですが、Pythonでは標準ライブラリで処理ができます。

また、同じフォルダや以下フォルダに含まれるファイルを繰り返し処理する場合のライブラリも準備されています。

以下にできることとサンプルコードを踏まえてご紹介します。

標準ライブラリ os で出来ること

全てではありませんが、良く使う機能を紹介します。

機能概要

  • カレントディレクトリを調べる(.getcwd())
  • カレントディレクトリを変更する(指定する)(.chdir(‘フォルダパス’))
  • フォルダを作る(.makedirs(‘フォルダパス’))
  • ファイル名を取得する(.path.basename(‘フォルダパス+ファイル名’))
  • フォルダパスを取得する(.path.dirname(‘フォルダパス+ファイル名’))
  • ファイルサイズを取得する(.path.getsize(‘フォルダパス’))
  • ファイル一覧を取得する(.listdir(‘フォルダパス’))
  • フォルダパスの検査(.path.exists(‘フォルダパス’))

サンプルコード

import os

/* カレントディレクトリを調べる */
os.getcwd()
    /* ->現在のカレントディレクトリを返す */

/* カレントディレクトリを変更する */
path = 'c:\\user\\taro\\mydocuments'
os.chdir(path)
    /* ->pathフォルダをカレントディレクトリに変更する */

/* フォルダを作る */
os.makedirs('\\folder1\\folder2')
    /* -> c:\\user\\taro\\mydocuments\\folder1\\folder2 */
    /* -> folder1,folder2まで作られる */

/* ファイル名を取得する */
filepath = 'c:\\user\\taro\\mydocuments\\test.txt'
os.path.basename(filepath)
    /* -> test.txt を返す */

/* フォルダパスを取得する */
os.path.basename(filepath)
    /* -> c:\\user\\taro\\mydocuments を返す */

/* ファイルサイズを取得する */
os.path.getsize(filepath)
    /* -> test.txtのファイルサイズを返す */

/* ファイル一覧を取得する */
os.listdir(path)
    /* -> c:\\user\\taro\\mydocumentsに保存されているファイル一覧を表示する  */

/* 応用:フォルダに含まれるファイルの合計ファイルサイズを取得する */
totalsize = 0 /* 初期化 */
for filename in os.listdir(filepath):
    totalsize = totalsize + os.path.getsize(os.path.join(filepath,filename))
    /* -> filepathに含まれるファイルサイズ合計を返す */

/* フォルダパスの検査 */
ngpath = c:\\user\\hanako\\mydocuments
os.path.exists(path)
    /* -> True を返す  */
os.path.exists(ngpath)
    /* -> False を返す(存在しない場合を仮定)  */

複数ファイル処理に便利な glob とは

指定したフォルダパスだけでなく、以下子フォルダも含めて取得可能。

拡張子指定や、ファイル名指定など使い方で色々できます

サンプルコード

/* globの使い方 */
import glob

path = 'c:\\user\\taro\\mydocuments'
files = glob.glob(path + '/*.txt')
    /* -> mydocumentsフォルダの中の.txtファイルを取得する */
files = glob.glob(path + '/*/*.txt')
    /* -> mydocumentsフォルダおよび子フォルダの中の.txtファイルを取得する */

/* 応用:.txtファイルのみ削除する */
for file in glob.glob(path + '/*.txt'):
    os.remove(file)
    /* -> mydocumentsフォルダの中の.txtファイルのみ削除される */

 

 

ABOUT ME
記事URLをコピーしました