種々のトランスコード(バイト、文字列、BASE64、numpyのアレイ、IO、BufferedReaderの)

バイトと文字列の間の変換

  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)

 

 

 

 

 

 

                           

おすすめ

転載: www.cnblogs.com/zhuminghui/p/11359858.html