Pythonのstr型とbytes型の基本
Pythonには、文字列を扱うためのstr
型と、バイト列を扱うためのbytes
型があります。
str型
str
型は、Unicode文字列を表現します。Python 3.x系では、文字列リテラル('Hello, World!'
など)はデフォルトでstr
型として扱われます。
s = 'Hello, World!'
print(type(s)) # <class 'str'>
bytes型
一方、bytes
型は、バイト列(0~255の整数のシーケンス)を表現します。バイト列は、b
プレフィックスをつけた文字列リテラル(b'Hello, World!'
など)で作成できます。
b = b'Hello, World!'
print(type(b)) # <class 'bytes'>
これらの型は、文字列とバイト列の間で相互に変換することが可能です。この変換は、エンコーディング(文字列をバイト列に変換する操作)とデコーディング(バイト列を文字列に変換する操作)と呼ばれます。
次のセクションでは、これらの変換方法について詳しく説明します。また、Pythonの文字列とバイト列の扱い方について、具体的な例を通じて理解を深めていきましょう。
str型からbytes型への変換
Pythonでは、str
型の文字列をbytes
型に変換することができます。これをエンコーディングと呼びます。エンコーディングには、str
型のencode
メソッドを使用します。
s = 'Hello, World!'
b = s.encode('utf-8')
print(b) # b'Hello, World!'
print(type(b)) # <class 'bytes'>
上記の例では、'utf-8'
という文字コードを指定しています。UTF-8は、Unicodeをバイト列に変換するための一般的なエンコーディング方式です。
エンコーディング方式を指定することで、様々な言語の文字を正しくバイト列に変換することが可能です。例えば、日本語の文字列をバイト列に変換する場合も、同様にencode
メソッドを使用します。
s = 'こんにちは、世界!'
b = s.encode('utf-8')
print(b) # b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf\xe3\x80\x81\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
print(type(b)) # <class 'bytes'>
このように、Pythonのstr
型からbytes
型への変換は、エンコーディングを通じて簡単に行うことができます。次のセクションでは、逆の変換、つまりbytes
型からstr
型への変換について説明します。この変換はデコーディングと呼ばれます。具体的な例を通じて、Pythonの文字列とバイト列の扱い方について理解を深めていきましょう。
bytes型からstr型への変換
Pythonでは、bytes
型のバイト列をstr
型の文字列に変換することができます。これをデコーディングと呼びます。デコーディングには、bytes
型のdecode
メソッドを使用します。
b = b'Hello, World!'
s = b.decode('utf-8')
print(s) # 'Hello, World!'
print(type(s)) # <class 'str'>
上記の例では、'utf-8'
という文字コードを指定しています。UTF-8は、バイト列をUnicode文字列に変換するための一般的なデコーディング方式です。
デコーディング方式を指定することで、様々な言語のバイト列を正しく文字列に変換することが可能です。例えば、日本語のバイト列を文字列に変換する場合も、同様にdecode
メソッドを使用します。
b = b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf\xe3\x80\x81\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
s = b.decode('utf-8')
print(s) # 'こんにちは、世界!'
print(type(s)) # <class 'str'>
このように、Pythonのbytes
型からstr
型への変換は、デコーディングを通じて簡単に行うことができます。次のセクションでは、これらの型と文字コードとの関連性について説明します。具体的な例を通じて、Pythonの文字列とバイト列の扱い方について理解を深めていきましょう。
文字コードとの関連性
Pythonのstr
型とbytes
型の間の変換は、文字コードと密接に関連しています。
文字コードとは
文字コードは、文字とバイト列(数字の並び)との間の対応関係を定めたものです。例えば、ASCIIコードでは、’A’は65、’B’は66といった具体的な数値に対応します。
エンコーディングとデコーディング
Pythonでは、str
型からbytes
型への変換(エンコーディング)と、bytes
型からstr
型への変換(デコーディング)を行う際に、文字コードを指定します。この文字コードによって、具体的な文字とバイト列との対応関係が決まります。
s = 'こんにちは、世界!'
b = s.encode('utf-8') # エンコーディング
print(b)
s2 = b.decode('utf-8') # デコーディング
print(s2)
上記の例では、UTF-8という文字コードを使用しています。UTF-8は、世界中のほとんどの文字を表現できるUnicodeをバイト列に変換するための方式です。
文字コードの選択
Pythonでは、エンコーディングとデコーディングに使用する文字コードを自由に選択できます。ただし、同じ文字列をエンコーディングとデコーディングする際には、同じ文字コードを使用する必要があります。
s = 'こんにちは、世界!'
b = s.encode('utf-16') # UTF-16でエンコーディング
print(b)
s2 = b.decode('utf-16') # UTF-16でデコーディング
print(s2)
このように、Pythonのstr
型とbytes
型、そして文字コードは密接に関連しています。これらの理解は、Pythonで文字列を扱う上で非常に重要です。次のセクションでは、これらの知識を活用した実用的な例を見ていきましょう。具体的な例を通じて、Pythonの文字列とバイト列の扱い方について理解を深めていきましょう。
実用的な例:ファイルの読み書き
Pythonのstr
型とbytes
型の知識は、ファイルの読み書きに直接応用することができます。以下に、テキストファイルとバイナリファイルの読み書きの例を示します。
テキストファイルの読み書き
テキストファイルの読み書きは、主にstr
型を使用します。以下に、テキストファイルの書き込みと読み込みの例を示します。
# ファイルに書き込む
with open('hello.txt', 'w', encoding='utf-8') as f:
f.write('こんにちは、世界!')
# ファイルを読み込む
with open('hello.txt', 'r', encoding='utf-8') as f:
s = f.read()
print(s) # 'こんにちは、世界!'
バイナリファイルの読み書き
一方、バイナリファイルの読み書きは、主にbytes
型を使用します。以下に、バイナリファイルの書き込みと読み込みの例を示します。
# ファイルに書き込む
with open('hello.bin', 'wb') as f:
f.write(b'\x68\x65\x6c\x6c\x6f')
# ファイルを読み込む
with open('hello.bin', 'rb') as f:
b = f.read()
print(b) # b'hello'
このように、Pythonのstr
型とbytes
型の理解は、ファイルの読み書きといった実用的なタスクに直接応用することができます。これらの知識を活用して、Pythonでの文字列とバイト列の扱い方をマスターしましょう。具体的な例を通じて、Pythonの文字列とバイト列の扱い方について理解を深めていきましょう。