この記事ではglobを使って指定したフォルダ内のファイル名一覧を取得する方法を整理します。
ファイル名一覧を取得する
フォルダ内の全ファイル名を取得
1 2 3 4 5 6 7 8 |
import glob #ファイル名一覧を取得したいフォルダのアドレスを保持 folder_path = r"・・・" #変数file_listに、指定したフォルダ内の全ファイルの名をリストで代入 file_list = glob.glob(folder_path + "\*") #出力するとフォルダパスを含むファイル一覧が表示される print(file_list) #["[ファイルパス]\1.xlsx, [ファイルパス]\.a.xlsx",・・・]] |
“file_list = glob.glob(folder_path + “\*”)”
この中で”\*”としている部分について(コード内ではバックスラッシュ)、”\”はフォルダパスの区切りを示しており、ファイル全てを指定しているのは”*”のみ
以下のような書き方もできる
1 2 3 4 5 6 7 8 9 10 11 |
import os import glob #変数folder_pathに取得したいフォルダのパス(アドレス)を保持 folder_path = r"・・・" #osモジュールで引数(カッコの中で指定したフォルダ)に移動 os.chdir(folder_path) #取得したいフォルダが現在いるフォルダになっているので、ファイル名一覧を取得 file_list = glob.glob("*") #出力するとファイル名の一覧を表示 print(file_list) #["1,xlsx,a.xlsx,b.docx"] |
“file_list = glob.glob(“*”)”では現在のフォルダ内のファイル名一覧を取得している。
” * “は1文字以上の文字を含むファイル全てを指す。
つまるところ全ファイルを取得する 。
Excelファイルを指定して全ファイル名を取得
1 2 3 4 5 6 7 |
import glob folder_path = r"・・・" #拡張子がxlsxのファイル一覧を取得 file_list = glob.glob(folder_path + "\*.xlsx") #出力すると末尾にxlsxがつくファイル名一覧が表示される print(file_list) #["1.xlsx, a.xlsx"] |
以下のようにも書くことができる
1 2 3 4 5 6 7 8 |
import os import glob folder_path = r"・・・" os.chdir(folder_path) file_list = glob.glob("*.xlsx") print(file_list) #["1.xlsx, a.xlsx"] |
“file_list = glob.glob(“*.xlsx”)”では、現在のフォルダ内で、任意の1文字以上の名前があり、また” .xlsx “が末尾につくファイル名の一覧を取得している。
“*”が任意の1文字以上のファイル名を持つことを指定し、” .xlsx “で拡張子(ファイルの種類)を指定している。
拡張子 ” .xlsx “ではなく ” .docs”とすることでWordや、” .ppt “とすることでパワーポイントのファイルも指定することができる。
一時ファイル(~$)を除いてファイル名一覧を取得
1 2 3 4 5 6 7 8 9 |
import os import glob folder_path = r"・・・" os.chdir(folder_path) #[!~$]でファイル名に~か$のいずれもつかないファイルの一覧を取得する #"[]"内の"!"が、後に続く~$を含むファイルを除いたを全ファイルを取得することを指示している file_list = glob.glob("[!~$]*.xlsx") print(file_list) #["1.xlsx, a.xlsx, b.docs・・・"] |
隠しファイルで先頭に”~$・・・.xlsx”とファイルが存在している場合がある。
これはExcelやWordを開いていることを示す一時ファイル。
開いていたExcelやWordを閉じると、このファイルも消えてしまう。
指定したフォルダ内の全ファイル内を別のフォルダに移動させる操作をする時に、途中でファイルが閉じられるなどでこの一時ファイルが消えると、エラーが発生することになる。
※以下画像の右端のファイル:”~$a.xlsx”
“~$”が先頭についているファイルは、ExcelやWordを開いていることを示す一時ファイル。隠しファイルなので、Windowsのエクスプローラーではデフォルトでは確認できない。フォルダ上部にある「表示」タブ→「表示」→「隠しファイル」と選択して、非表示になっている隠しファイルを表示させることで確認できる場合がある。
特殊文字を用いて条件に合うファイル名一覧を取得
globモジュールでは、正規表現のパターンマッチングと同じように条件に合うファイルだけを取得することができる。そのための特殊文字は以下の通り。
“*”
任意の文字列を含むファイル名を指す。
例:”1.docs”、”a.txt”、”123.xlsx”、”abc.ppt”
“?”
1文字の任意の文字を含むファイル名を指す。
例:”1.docs”、”a.txt”
“[]”
ファイル名の先頭に、”[]”のどれか1文字を持つファイル名を指す。
例1:”[123].xlsx”の場合、先頭に1,2,3のどれかを持つファイル
→”1.xlsx”, “2.xlsx”, “3.xlsx”
例2:”[123]*”の場合、先頭に1,2,3のどれかがあり、さらに2文字目以降に0文字以上の任意の文字列を持つファイル
→”1xyz.xlsx”, “2.docs”, “309あいうえお.ppt”
※逆に2文字目以降に1,2,3のどれかがあっても取得することはできない
“[!文字列]”
ファイル名の先頭に、”[!・・・]”の”・・・”で指定した文字列を全て持たないファイルを指す。
ファイルが以下の一覧とする
“1.xlsx,”, “a.xlsx”, “1a.xlsx”, “a1.xlsx”, “b.docs”, “c.txt”, “d.pub”, “e.ppt”
例1:”[!abc].xlsx”:ファイル名の先頭にa,b,cのいずれも持たない.xlsxファイル全てを指す。
→”1.xlsx”
※これ以外はa,b,cの文字を含むので取得されない。
例2:[!abc]*:ファイル名の先頭にa,b,cのいずれも持たず、0文字以上の任意の文字列を持つファイル全て
‘1.xlsx’, ‘1a.xlsx’, ‘d.pub’, ‘e.pptx’
※1文字目にa,b,cがない全てのファイル
例3:”[!123].xlsx”:ファイル名の先頭に1,2,3のいずれも持たずない.xlsxファイル全て
→”a.xlsx”
※.xlsxファイルの内、先頭に1,2,3のどれも持たないファイルは”a.xlsx”のみ
コメント