Index > Jythonで特定の拡張子を持つファイルだけをリストアップしたい java.io.FileFilter の利用
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$"

で済む話ですけど。

 Twitter
follow me on Twitter
 Categories