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として扱う・・・ という記載を読んだ記憶があったのだが。