Python 3でbytesをstrに変換する方法

PYTHON3 チュートリアル

Pythonで外部プログラムを使用する際、システムコマンドの出力を処理する必要がよくあります。Python 3では、この出力は通常、bytesオブジェクトとして取得されます。これを処理および表示するためには、bytesオブジェクトをstrに変換する必要があります。この記事では、その方法について説明します。

課題

たとえば、システムコマンドls -lを実行して、現在のディレクトリ内のファイルをリスト表示し、その出力をPythonで取得するとします。subprocessモジュールを使用してコマンドを実行し、その出力を取得しました:

from subprocess import Popen, PIPE

# コマンドを実行し、出力をbytesオブジェクトとして取得
stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]

print(stdout)

結果は次のようにbytesオブジェクトとして表示されます:

b'total 0\n-rw-rw-r-- 1 user user 0 Mar  3 07:03 file1\n-rw-rw-r-- 1 user user 0 Mar  3 07:03 file2\n'

このbytesオブジェクトをstrに変換して、次のように表示したいとします:

total 0
-rw-rw-r-- 1 user user 0 Mar  3 07:03 file1
-rw-rw-r-- 1 user user 0 Mar  3 07:03 file2

解決方法

bytesstrに変換するためには、decodeメソッドを使用し、エンコーディングをUTF-8に指定します。以下の方法で実行できます:

from subprocess import Popen, PIPE

# コマンドを実行し、出力をbytesオブジェクトとして取得
stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]

# bytesオブジェクトをUTF-8エンコーディングでstrに変換
stdout_str = stdout.decode('utf-8')

# 文字列を表示
print(stdout_str)

説明

  1. 出力の取得: Popen関数を使用してls -lコマンドを実行し、標準出力(stdout)をbytesオブジェクトとして取得します。
  2. 変換: decode('utf-8')メソッドを使用して、bytesオブジェクトをstrに変換します。UTF-8は最も一般的に使用されるエンコーディングです。
  3. 表示: 結果の文字列を画面に表示します。

上記のコードを実行すると、シェルで直接ls -lコマンドを実行したときと同様の結果が得られます:

total 0
-rw-rw-r-- 1 user user 0 Mar  3 07:03 file1
-rw-rw-r-- 1 user user 0 Mar  3 07:03 file2

Python 3でbytesstrに変換することは、外部プログラムの出力を処理する際に重要なステップです。decodeメソッドとUTF-8エンコーディングを使用することで、この出力を通常の文字列として簡単に変換および処理できます。この方法が、あなたのプロジェクトで効果的に応用できることを願っています。

※初心者向けの13冊のPython独学書

購読
通知
0 Comments
Inline Feedbacks
View all comments