バイトと文字列の間の変換
python3最も重要な新機能は、おそらくテキストとバイナリデータは明確な区別がなされます。バイトで表現STR型のバイナリデータ型で表現テキスト常にUnicode、。STRのpython3は、二つの間の区別で特に明らかである、任意のバイトと暗黙方法を混在させません。バイト列と接合することができないパッケージは、袋は、バイトの文字列(またはその逆)を検索することができない、また文字列パラメータは、パケットのバイト(またはその逆)の関数として渡すことができます
B = B1 ' SDF ' S1 = ' SAG ' プリント(型(B1)、タイプ(S1)) #<クラス'STR'> <クラスは'バイト'> #1 として、UTF8の方法によってデコードバイトSTR B2 = b1.decode (' UTF8 ' ) #1 バイトに符号化された方法のUTF8によってSTR S2 = s1.encode(' UTF8 ')
base64でトランスコーディング
インポートBASE64 オープン(と" img.png "、" RB " Fとして): #b64encode是编码、b64decode是解码 base64_data = base64.b64encode(f.read()) プリント(base64_data) R = base64.b64decode(base64_data) プリント(型(r)は、r)は ()f.close
numpyの配列成バイト转
インポートCV2の インポートのNPとしてnumpyの B = B ' aaaaaaaaa ' #1 バイト image_array1 = np.frombuffer(B、DTYPE = np.uint8) #のnumpyのアレイ img_decode = cv2.imdecode(image_array1、1) #效果等同于cv2.imread()
BytesIO和のStringIO
BytesIOとはStringIOでのpython3最大の利点は、あなたが読み取りおよび書き込み操作はディスクレベルIOのみの時間の節約に関して、メモリ内で実行されても、エラーの確率を保存することができるということです
StringIOを
IO インポートたStringIO Fは = にStringIO() f.write(' こんにちは')#のメモリ書き込み動作レベルの 印刷(をf.getvalue()) #のGETファイルの内容(ディスクIO読み出し動作()に相当) #をも使用することができますたStringIOにSTRを初期化し、その後、同じ文書が読み読み: から IO インポートたStringIO FがたStringIOを=(' こんにちは\ NHI \ nGoodbyeを!!! ' ) しばらく真: S = f.readline() IF S == '' : BREAKの 印刷(s.strip()) '' ' こんにちは! こんにちは! さようなら! 「「」
BytesIO
StringIOを操作だけで、あなたがバイナリデータで作業している場合、あなたはBytesIOを使用する必要がある、をstr、BytesIOメモリ内のバイトの読み取りおよび書き込みを達成することができます
IO インポートBytesIO F = BytesIO() f.write(' 中国' .encode(' UTF-8 ' )) を印刷(f.getvalue()) #のB '\ XE4 \ XB8 \ XAD \ XE6 X96 \のx87 \' #の書き込みはstrを、しかし、UTF-8エンコードされたバイトの後ではありません。 #:そしてたStringIOなどが、バイトがBytesIOを初期化するために使用することができ、その後、同じ文書はとして読み取る読み取り から IO インポートBytesIO F = BytesIO(B ' X96 \のx87が\ \ XE4 XB8 \ XAD \ XE6 \ ' ) )(f.readに達し#のB '\ XE4 \ XB8 \ XAD \ XE6 X96 \ののx87 \'
ポインタの問題に注意してください。
以降.getvalue()は初期位置は0、多くの、同じ構造の初期位置した後、直接または0 .seek().tell(位置に直接移動することがいかにへの入力の数である)(全入力.WRITE後の状況を確認することができます)あなたは、自動的に最後までポインタの位置を読んで、現在の場所.read()の終了を表示することができます
たStringIO = F(' ABC ' ) に達したが、f.read() #の戻り'ABC' 達するは、f.read() #の戻り''リードポインタの後に使用されるようにして移動 f.getvalue() #の戻り'ABC'はないのgetValueからです効果ポインタ FはたStringIO(= '' ) f.write(' ABCが' ) に達し、f.read() #の戻り''ライトポインタが移動したとして有する f.getvalue() #の戻り'ABC'がのgetValueためポインタでありませんエフェクト f.seek(0) #のソリューション:ゼロへのポインタを求める 達し、f.read() #の戻り'ABC'
BufferedReaderの
BufferedReaderのファイル記憶タイプはBufferedReaderの郵便配達のタイプにデータを送信し変換することができ、それはnumpyの配列に変換することができる、CV2の動作
= IMG(request.file.get ' XXX ')位サーバに郵便配達の画像を通過するように想定され、サーバは、IMGのために受信 #のBufferedReaderのフォーマットにターン img_buff = BufferedReaderの(IMG) 位バイトのデータ取得 img_byte = BufferedReader.readを( img_buff) #numpyの配列にトランスフェクト nparr = np.frombuffer(img_byte、DTYPE = np.uint8) #1 と同じ効果cv2.imreadのに転送データ img_decode = cv2.imdecode(nparr ,. 1 ) プリント(img_decode.shape)