ファイルがあり、それをBytesIO
オブジェクトに変換して、データベースのvarbinary列に格納できるようにします。
誰かがPythonを使用して変換するのを手伝ってくれませんか。
以下は私のコードです:
f = open(filepath, "rb")
print(f.read())
myBytesIO = io.BytesIO(f)
myBytesIO.seek(0)
print(type(myBytesIO))
open
とmoderead-binaryを使用してファイルを開くと、すでにバイナリI/Oオブジェクトが提供されています。実際、 ドキュメントは非常に明確です これについて:
バイナリストリームを作成する最も簡単な方法は、モード文字列に「b」を指定したopen()を使用することです。
f = open("myfile.jpg", "rb")
したがって、通常の状況では、ファイルハンドルを提供する必要がある場所に渡すだけで問題ありません。 本当にBytesIO
インスタンスを取得したい/必要な場合は、次のようにBytesIO
インスタンスを作成するときにファイルから読み取ったバイトを渡すだけです。
with open(filepath, 'rb') as fh:
buf = BytesIO(fh.read())
これには、ファイル全体をメモリにロードするという欠点があります。これは、インスタンスを渡すコードが、ファイルをメモリに保持せずにストリーミングできるほど賢い場合は回避できる可能性があります。この例では、エラーが発生した場合でもファイルを確実に閉じる コンテキストマネージャー としてopen
を使用していることに注意してください。
これを試して:
import io
f = open(filepath, "r").read()
b = io.BytesIO(f.encode())
おそらくencode
メソッド内で、encoding='utf8'
または別のエンコーディングを渡す必要があります。
お役に立てば幸いです。