Wed, March 11, 2009
Jythonで特定の拡張子を持つファイルだけをリストアップしたい java.io.FileFilter の利用
ちょっとした作業で、特定拡張子を持つファイルだけをリストアップしたくなることは多い。 そんなときにいつも使っている jython スクリプト。
ちなみに Javaで処理した場合
java.io.FileFilter を使えば、特定拡張子を持ったファイルをリストアップできる。 以下のように・・・(Javaの場合)
FileFilter ff=new FileFilter(){
public boolean accept(File pathname){
if( pathname.isFile() ){
return pathname.getName().endsWith(".txt");
}
return false;
}
};
File[] files=new File(".").listFiles(ff);
Jythonで実現する方法
こんなちょっとしたコードを書きたくなるのはたいてい、jythonで仕事をやっつけようとしているときだ。 Jythonでどう書くか。
import java.lang as lang
import java.io as io
class FF(io.FileFilter):
def __init__(self,suffix):
self._suffix=suffix
def accept(self,file):
if file.isDirectory():
return False
return lang.String(file.getName().lower()).endsWith(self._suffix)
list=io.File(".").listFiles( FF(".html") )
for file in list:
print file
※そのままJavaのコードを移植するのではなく、任意の拡張子を指定できるように変更。
応用:カレントディレクトリの特定拡張子を持つファイルのリストアップ
listup.py
import sys
import java.lang as lang
import java.io as io
class FF(io.FileFilter):
def __init__(self,suffix):
self._suffix=suffix
def accept(self,file):
if file.isDirectory() :
return False
return lang.String(file.getName().lower()).endsWith(self._suffix)
suffix = sys.argv[1]
list=io.File(".").listFiles( FF("."+suffix) )
for file in list:
print file
実行
$ jython listup.py eps
カレントディレクトリで eps 拡張子を持つファイルをリストアップ。
ちなみに bash + egrep なら
$ ls | egrep ".eps$"
で済む話ですけど。