Python テキストストリームへ書き出す¶
とある EC プラットフォームで、CSV 上のデータ文字のバイト数オーバー規定が以下のようになっている。
>>> import io >>> import csv # 対象データ内に改行を含めて csv モジュールにクォートさせる >>> val = "aaa \n kkk \n hhh" # この時点での Shift_JIS, newline="\r\n" でのバイト数は >>> len(val.replace("\n", "\r\n").encode('shift_jis')) 17 # テキストストリームを用意する # newline パラメータに None を指定すると環境にかかわらず "\n" で出力(CSV データ内の改行文字は別の話) >>> output = io.StringIO(newline=None) # csv の出力先にテキストストリームを指定 >>> cout = csv.writer(output) # val を CSV の1データとして出力 >>> cout.writerow([ val ]) # テキストストリームの中身を確認してみる getvalue() >>> output.getvalue() '"aaa \n kkk \n hhh"\n' # データ自体のバイト数を計測 >>> len(output.getvalue().rstrip().replace("\n", "\r\n").encode('shift_jis')) 19 # テキストストリームを close() で解放する >>> output.close() 参考: Python3.5.2 16.2. io — ストリームを扱うコアツール class io.StringIO(initial_value='', newline='\n')
Last modified: 2016-12-19 | ||
|
||
|
||
© Shin Nakamura/BasicWerk 2008 - 2024 |