Index > Jythonでよく使うテクニック
Tue, October 10, 2006

{update:2007-01-15}

Jythonでよく使うテクニック

繰り返し使うテクニックを備忘用にメモしています。

ディレクトリ内の拡張子 .txt を持つファイルを列挙する

jythonをbashの代わりに使う場合、たびたび使うことになるイディオム。

import java.lang as lang
import java.io as io

class TextFileFilter(io.FileFilter):

    def accept(self,file):
        fname=file.getName()
        return lang.String(fname).endsWith(".txt")


list=io.File("./").listFiles(TextFileFilter())
for file in list:
    print file.name

ファイルの拡張子だけ変更したい

{strong:foo.txt} を処理して、{strong:foo.html} に保存したい、ということがあります。

そんなときは、 reモジュールを使って置き換えします。

import re

file="foo.txt"
matchstr=re.compile("\.txt$")
htmlf=matchstr.sub(".html",file)

print htmlf

特殊記号のエスケープ処理

ウェブページにコードを載せる場合、HTMLで使用できない < > などの特殊記号を エスケープする必要があります。 RSSフィードなどの生成時でもやはりエスケープが必要で、この手のコードは 手元にあると便利です。

import sys
import java.lang as lang
import java.io as io

false=0
true=1

def read(file):

    sb=lang.StringBuffer()

    br=io.BufferedReader(io.FileReader(file))
    while(true):
        line=br.readLine()
        if line==None:
            break

        line=lang.String(line).replaceAll("&","&amp;")
        line=lang.String(line).replaceAll("<","&lt;")
        line=lang.String(line).replaceAll(">","&gt;")
        line=lang.String(line).replaceAll("\"","&quot;")

        sb.append(line)
        sb.append(lang.System.getProperty("line.separator"))

    br.close()
    return sb.toString()

file=io.File(sys.argv[1])
text=read(file)
print text

このコードを、convert.py というファイル名で保存したら、 以下のように実行する。(結果はコンソールに標準出力されます。)

 $ jython covert.py foo.txt 
 Twitter
follow me on Twitter
 Categories