Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

Python2.7をインストールして、ちょっとしたツールを書く。

仕事で、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ならワンライナーである。

> 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の方も、もう少しスマートに出来そうなものだけど・・・