Python2とPython3での日本語文字列対応について

毎回、同じようにつまづいて、同じような感じで対応してます。

なので、いいかげん自分に判りやすいようにまとめておきます。

日本語対応といっても、ソースコード中に日本語を書くつもりはありません。

データはYAML形式のファイルで用意。

そして、YAML形式データファイル中の文字列を、UTF-8で日本語に置き換えようとして、 毎回 「うぅっ」 「ぬはぁ」とうなってます。



2: の場合


:4 の場合


2:3 の場合


2 の場合


3 の場合


結論

日本語を含む文字列処理で .foramt() や .join() を使いたい

Python2 では日本語を含む文字列は .encode('utf-8')して UTF-8 で保持。

Python3 では日本語の有無に関係なく、素直にstrのままでよし。

(改行を入れてみると) Python2 では日本語を含む文字列は
.encode('utf-8')して UTF-8 で保持。

Python3
では日本語の有無に関係なく、
素直にstrのままでよし。
ここは改行の直後

日本語を含むUTF-8のテキストを標準入力、標準出力で扱いたい

Python2 では素直に sys.stdin/sys.stdout を read/write。

Python3 では sys.stdin.buffer , sys.stdout.buffer を使う。

Python2 の世界には .buffer は存在しないので 注意。


$ cat p2.py
#!/usr/bin/env python2

import sys
import yaml

if __name__ == "__main__":
        s = sys.stdin.read()
        d = yaml.load(s)
        foo = d.get('foo')
        bar = d.get('bar')
        d['hoge'] = foo + ' ' + bar
        d['fuga'] = 'foo={} bar={}'.format(foo, bar)
        d['guha'] = '(^_^)'.join( d.values() )
        s = yaml.dump(d, default_flow_style=False)
        sys.stdout.write(s)
# EOF

ここはデフォルトp

ここは明示的にp

v2.patch

バージョン2のための パッチ となります。

v2.patchv3.patchv4.patch

簡易なHTMLパーサ 2018秋

これは pythonのモジュールのインポート について。

ここはpre
p
  ここもpre
h1
  ここもpre

ここはp

---



ここは暗黙のp

ここはh3---



---

ここはp

dlをためす

int
整数
float
実数
complex
複素数

あるいは

int
整数
割込
float
実数
浮遊 (飲物の中のアイスクリーム?)
complex
複素数
劣等感

table

foo bar hoge
1 2 3
4 5 6

table th

foo bar hoge
1 2 3
4 5 6

table th2

foo bar hoge
1 2 3
4 5 6

table colspan

foo bar hoge
1 2 3 4
4 5 6

table rowspan

foo bar hoge
1 3
4 5 6

箇条書

挨拶 おはよう
ちいーっす
こんにちは
ちいーっす
こんばんわ
ちいーっす
出発 いってきます
ほな
いってらっしゃい
帰宅 ただいま
ただいまもどりました
おかえり
おかえりあそばせ

tbl_ulモード

挨拶 おはよう
ちぃーっす
こんにちは
ちぃーっす
こんばんわ
ちぃーっす
出発 いってきます
ほな
いってらっしゃい
帰宅 ただいま
ただいまもどりました
おかえり
おかえりあそばせ

tbl_orgとtbl_ulの結合

種別 状況 セリフ
挨拶 おはよう
ちぃーっす
こんにちは
ちぃーっす
こんばんわ
ちぃーっす
出発 いってきます
ほな
いってらっしゃい
帰宅 ただいま
ただいまもどりました
おかえり
おかえりあそばせ
ここはpre