python2とpython3の文字コードと正規表現
python3系で書かれたサンプルコードをpython2系で実行するためにコードを書き換えようとしているのですが不明な点があります.
上のサンプルコードにfrom io import open
と追加しpython html_parser.py
と実行したところ
File "html_parser.py", line 314, in get_data
if "1時間ごとの値" in txt or "10分ごとの値" in txt: # 観測データの種類を判別し
て呼び出す関数を変えている
TypeError: 'in <string>' requires string as left operand
と表示されました.
そこで def get_data(lines, data=None)
の中でif u"1時間ごとの値" in txt or u"10分ごとの値" in txt
のようにすべての日本語の前にuをつけて実行したところ,
Traceback (most recent call last):
File "html_parser.py", line 412, in <module>
main()
File "html_parser.py", line 399, in main
data = get_data(lines, _date) # error occurred! 2017 12 28
File "html_parser.py", line 315, in get_data
data = get_data_from_past_format(lines)
File "html_parser.py", line 166, in get_data_from_past_format
indexes = get_column_names(lines) # 項目名と、項目名が含まれる最後の行号
を取得
File "html_parser.py", line 146, in get_column_names
index_list = [""] * len(table[0]) # まずは列の数だけ空の文字列を作る
IndexError: list index out of range
とのエラーが出ました.python3の環境とpython2の環境で出力を比べたところpython2環境下ではdef get_data_from_past_format(lines)
の返り値がなにもなく,おそらく関数内の正規表現マッチングが上手く働いていないかと思っております.どのように対応すればよいでしょうか.
実行手順は
1. サンプルコード(download.py)にfrom io import open
を追加してpython download.py
を実行
2. サンプルコードを実行
しています.
ちなみにpython3環境下では1,2とも動作確認済みです.
よろしくお願いいたします.