web-dev-qa-db-ja.com

python)を使用してファイルをBytesIOオブジェクトに変換します

ファイルがあり、それをBytesIOオブジェクトに変換して、データベースのvarbinary列に格納できるようにします。

誰かがPythonを使用して変換するのを手伝ってくれませんか。

以下は私のコードです:

f = open(filepath, "rb")
print(f.read())

myBytesIO = io.BytesIO(f)
myBytesIO.seek(0)
print(type(myBytesIO))
2
user2961127

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を使用していることに注意してください。

4
Stephan Klein

これを試して:

import io

f = open(filepath, "r").read()

b = io.BytesIO(f.encode())

おそらくencodeメソッド内で、encoding='utf8'または別のエンコーディングを渡す必要があります。

お役に立てば幸いです。

0
Paulo Marques