蛇使いな彼女BLOG
【第28回】 python小技編②-globのファイル操作
2021.02.05
前回globのファイル探索で * ? [ ] の3種類の特殊文字を使うことが
できるという説明と、これらは正規表現(re)とはまた別物ですと紹介して
軽く流しました……が。
正規表現について記事を書いている最中、(やっぱりこの説明いる?)と不安になったので、先に特殊文字を使ったglobのファイル探索方法を先にさらっと簡単に説明します。
今回と次回にかけて記号ばっかりでちょっと眠たい内容ですが、知っていると後々助かる(?)かもしれない内容です。多分 (;´∀`)
さて、今日の例は読み込むファイルと前回のプログラムを少し書き変えただけです。
まずPatternというフォルダの中にはこのように形式の違うファイルが格納されています。
これをglobと特殊文字 * ? [ ] を使って、特定のファイルのみ取り出すという作業を行います。
★今日の例題プログラム★
★解説&結果★
まず今回は2行目でpprintをインポートしています。
これは通常のprintよりもきれいに整理された結果を見たいときに便利なツールです。
(↓こんな感じに見やすく改行できたりします✨)
f1 = glob.glob(fld+'/*') # *は長さ0以上の任意文字列、
これは、fld以下に存在する全てのファイルにヒットします。
*の前の/はフォルダーとファイルの仕切り(?)のようなものです。
これを入れ忘れるとファイルの探索ができません(笑)
>>pprint.pprint(f1)
['C:/Users/HYDROLAB/Desktop/pattern\\20201028030000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_000000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_010000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_020000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_040000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_060000.txt',
'C:/Users/HYDROLAB/Desktop/pattern\\2020_1028_050000.csv']
f2 = glob.glob(fld+'/*.txt')
これはtxt形式のファイルに一致します。
>>pprint.pprint(f2)
['C:/Users/HYDROLAB/Desktop/pattern\\20201028_060000.txt']
f3 = glob.glob(fld+'/[0-9]*_[0-9]*.csv') # [ ]は集合のどれか1文字
[0-9]これは0から9までの数値から1文字という意味です。-で範囲を指定できます。
その後に、*が来ているということは先頭が数値であれば以降は数字でも文字でもOKなパターンです。
これを実行すると…
>>pprint.pprint(f3)
['C:/Users/HYDROLAB/Desktop/pattern\\20201028_000000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_010000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_020000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_040000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\2020_1028_050000.csv']
f4 = glob.glob(fld+'/????????_??????.csv')# ?は任意の1文字
?が8個にアンダーバー、その後また?が6個ということは…
8文字_6文字.csv 形式のファイルに一致します。
>>pprint.pprint(f4)
['C:/Users/HYDROLAB/Desktop/pattern\\20201028_000000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_010000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_020000.csv',
'C:/Users/HYDROLAB/Desktop/pattern\\20201028_040000.csv']
いかがでしょうか(^_^)
特殊文字を使うとかゆいところに手が届きそうですよね!
次回は更に複雑なパターンの探索に応用できる正規表現について見ていきます★