TypeError: write() の引数はバイトではなく str でなければならない Python3 でバイナリファイルを書き込む方法とエラーの原因
2022-02-18 05:18:48
Python2はバイナリファイルにランダムに書き込む。
with open('/python2/random.bin','w') as f:
f.write(os.urandom(10))
しかし、Python3を使用するとエラーが報告されます。
TypeError:must be str, not bytes
その理由は、Python 3ではopen関数にencodingという新しいパラメータが追加され、そのデフォルトが「utf-8」になっているからです。そのため、ファイルハンドルで読み書きする場合、システムは開発者に、バイナリデータを含むbyteではなく、ユニコード文字を含むインスタンスを渡すように要求します。
回避策
操作対象のファイルを開く際に、本来の文字書き込みモード('w')ではなく、バイナリ書き込みモード('wb')を使用します。
Python3、Python2ともに以下のように適応させる。
with open('python3/rndom.bin','wb') as f:
f.write(os.urandom(10))
ファイルからデータを読み込む場合にも、同様の問題があります。この問題の解決方法も同様で、「r」モードを使うのではなく、「rb」モード(バイナリモード)でファイルを開くことです。
関連
-
undefinedImportError: 必要な依存関係['Numpy']がありません。
-
adb デバイス オフライン
-
Python3.3継続行のアンダーインデントで、.の後に複数のスペースを入れて視覚的にインデントしています。
-
gensim: queue という名前のモジュールがありません。
-
ImportError: scipy'という名前のモジュールがありません。
-
python3.x: urllib2' という名前のモジュールがない
-
pythonのstring()モジュール
-
plt.acorr() 関数の使用例 - ValueError: object too deep for desired array (オブジェクトが深すぎて、必要な配列が得られない)
-
pyinstaller パッケージ生成 .exe 実行ファイルエラー "IndexError: tuple index out of range"
-
Pythonです。AttributeError: module 'numpy' has no attribute 'dtype' 問題が解決されました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
'DataFrame' オブジェクトに 'sort' 属性がありません。
-
ImportError: 名前 '_validate_lengths' をインポートできない。
-
ImportError: scipyという名前のモジュールがない(解決済み)
-
python で word, excel, csv, json ファイルの読み書きをする。
-
PyChamの「AttributeError:module 'pip' has no attribute 'main'」エラー解決法
-
urlでMax retries exceededの問題を解決しました。
-
Python pipを使ったpymysqlモジュールのインストール (Error: ImportError: No module named pymysql)
-
Python27 PILソリューションという名前のモジュールがない
-
import urllib.parse ImportError: parse という名前のモジュールがありません
-
TypeError: バイトライクオブジェクトで文字列パターンを使用できない