Index > Jythonでのファイル読み込みコード 関数版 (Javaスタイル)
Tue, January 20, 2009

Jythonでのファイル読み込みコード 関数版 (Javaスタイル)

jythonでのファイル読み込みコードの関数版です。
読み込み結果を そのまま 標準出力しないで、java.util.ArrayListのオブジェクト として返します。

rfile-def.py

import java.io as io
import java.util as util


ENC="UTF-8"

def getList(f): 

    list=util.ArrayList()

    br=io.BufferedReader( io.InputStreamReader( io.FileInputStream(f),ENC ) )

    while(True):
        line=br.readLine()
        if(line==None):
            break

        list.add(line)

    br.close()

    return list


f=io.File("list.txt")
list=getList(f)
for item in list:
    print item

commons-io

※こんな関数は、自分で書かないで、jakarta commons-ioを使えばよいのですが、 jythonの場合、いちいち commons-io.jar をクラスパスに指定するのが面倒なので・・・

この関数の応用例としては、 二つのファイルのファイルリストを見比べて、片方にしかない行を抽出するとか、 両方にある行だけを抽出する場合に便利です。

たとえば、上記関数を利用して、以下のような比較コードが書けます。

list-1.txt と list-2.txt を比較して、list-2.txt のうち、 list-1.txt に存在しない行のみを 標準出力するコード。

f=io.File("list-1.txt")
list=getList(f)
#for item in list:
#   print item

f2=io.File("list-2.txt")
list2=getList(f2)
for item2 in list2:

    exists=False
    for item in list:
        if item==item2:
            exists=True
            break

    if exists==False:
        print item2

False,Trueが組み込まれているとは知りませんでした...

Pythonのコードを書いていて、False,Trueがそのまま使えるので、 Jythonでも使えるかと思って今回試したら使えました。
以前、PythonとかJythonは、ブール値はあくまで、Integerとして扱う・・・ という記載を読んだ記憶があったのだが。

 Twitter
follow me on Twitter
 Categories