仕事で、Python2.7しかない環境でちょっとした修正をしなくてはならなくなり、 手元にインストールする。
pyenvを使う。
今は、3.8しか入ってない。自分はPythonといえばこれしか使ったことがないRuby野郎である。
> pyenv version 3.8.5 (set by /Users/tambara/.pyenv/version)
pyenv install --list
して入れるバージョンを決める
> pyenv install --list Available versions: 2.1.3 2.2.3 2.3.7 2.4.0 2.4.1 (以下略)
2.7の最新は2.7.18らしい。
> pyenv install 2.7.18 python-build: use openssl from homebrew python-build: use readline from homebrew Downloading Python-2.7.18.tar.xz... -> https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz Installing Python-2.7.18... python-build: use readline from homebrew python-build: use zlib from xcode sdk Installed Python-2.7.18 to /Users/tambara/.pyenv/versions/2.7.18
作業ディレクトリで、2.7.18を使うことを宣言する。
> pyenv local 2.7.18 > python --version Python 2.7.18
おっけー。
やりたいことは、以下の様なHTMLの表が
<table class="cols" border="2" cellspacing="0" cellpadding="4" frame="box"> <tr valign="top"> <td class="propname"><B><script language="JavaScript">splitLongName('テスト')</script></B></td> <td class="propval">VarChar/Unicode(1)</td> </tr>
がJavaScriptのない環境では上手く表示できないのを直す。要するに
<script language="JavaScript">splitLongName('テスト')</script>
を
テスト
に出来ればよい。
こんな感じ?
> cat fix_htm.py #!/usr/bin/env python import re import sys r = re.compile(r"<script language=\"JavaScript\">splitLongName\('(.+)'\)</script>") with open(sys.argv[1]) as f: for line in f: mo = r.search(line) if mo: item = mo.group(1) print r.sub(item, line.rstrip()) else: print line.rstrip() > ./fix_htm.py sample.txt <table class="cols" border="2" cellspacing="0" cellpadding="4" frame="box"> <tr valign="top"> <td class="propname"><B>テスト</B></td> <td class="propval">VarChar/Unicode(1)</td> </tr>
よさげ。
> ruby -pe '$_.sub!(%r!<script language="JavaScript">splitLongName\\(\'(.+)\'\\)</script>!, \'\\1\')' sample.txt <table class="cols" border="2" cellspacing="0" cellpadding="4" frame="box"> <tr valign="top"> <td class="propname"><B>テスト</B></td> <td class="propval">VarChar/Unicode(1)</td> </tr>
Pythonの方も、もう少しスマートに出来そうなものだけど・・・