Python の組み込み関数 str の使い方です。
str 関数で、オブジェクトの文字列表現を取得するコード例と、実行結果を載せました。
str(object='')
str を渡した結果
str 関数に、str(文字列)を渡した結果です。
str('') # '' 空文字列
''
普通の ASCII 文字列を渡した結果。
str('12345') # '12345'
'12345'
str('abcde') # 'abcde'
'abcde'
非 ASCII 文字列を渡した結果。
str('ãäëÿ') # 'ãäëÿ'
'ãäëÿ'
str('あ') # 'あ'
'あ'
str('漢字') # '漢字'
'漢字'
str('1aãあ漢字') # '1aãあ漢字'
'1aãあ漢字'
(参考)ascii 関数の場合です。
ascii('1aãあ漢字') # '1aãあ漢字'
"'1a\\xe3\\u3042\\u6f22\\u5b57'"
(参考)repr 関数の場合です。
repr('1aãあ漢字') # '1aãあ漢字'
"'1aãあ漢字'"
pathlib.Path を渡した結果
str 関数に、pathlib の Path を渡した結果です。
(Python) class pathlib.Path(*pathsegments)
from pathlib import Path
str(Path(r'F://abc/あいう/memo.txt')) # WindowsPath('F:/abc/あいう/memo.txt')
'F:\\abc\\あいう\\memo.txt'
tuple を渡した結果
str 関数に、tuple を渡した結果です。
str(()) # ()
'()'
str((1, 'a', 'ã', 'あ')) # (1, 'a', 'ã', 'あ')
"(1, 'a', 'ã', 'あ')"
list を渡した結果
str 関数に、list を渡した結果です。
(Python) class list([iterable])
str([]) # []
'[]'
str([1, 'a', 'ã', 'あ']) # [1, 'a', 'ã', 'あ']
"[1, 'a', 'ã', 'あ']"
set を渡した結果
str 関数に、集合の set を渡した結果です。
(Python) class set([iterable])
str(set()) # set()
'set()'
str({1, 'a', 'ã', 'あ'}) # {'a', 1, 'ã', 'あ'}
"{'a', 1, 'ã', 'あ'}"
dict を渡した結果
str 関数に、辞書の dict を渡した結果です。
str({}) # {}
'{}'
str({1: 'a', 2: 'ã', 3: 'あ'}) # {1: 'a', 2: 'ã', 3: 'あ'}
"{1: 'a', 2: 'ã', 3: 'あ'}"
str({'あ': 'ã'}.keys()) # dict_keys(['あ'])
"dict_keys(['あ'])"
str({'あ': 'ã'}.values()) # dict_values(['ã'])
"dict_values(['ã'])"
str({'あ': 'ã'}.items()) # dict_items([('あ', 'ã')])
"dict_items([('あ', 'ã')])"
bytes を渡した結果
str 関数に、bytes を渡した結果です。
(Python) class bytes([source[, encoding[, errors]]])
str(b'') # b''
"b''"
str(b'\x00') # b'\x00'
"b'\\x00'"
str(b'\x00\x01') # b'\x00\x01'
"b'\\x00\\x01'"
bytearray を渡した結果
str 関数に、bytearray を渡した結果です。
(Python) class bytearray([source[, encoding[, errors]]])
str(bytearray()) # bytearray(b'')
"bytearray(b'')"
str(bytearray((0,))) # bytearray(b'\x00')
"bytearray(b'\\x00')"
str(bytearray((0, 1))) # bytearray(b'\x00\x01')
"bytearray(b'\\x00\\x01')"
function を渡した結果
str 関数に、function(関数)を渡した結果です。
str(lambda x:x) # <function <lambda> at 0x0000000000000000>
'<function <lambda> at 0x0000000000000000>'
組み込み定数を渡した結果
str 関数に、組み込み定数を渡した結果です。
str(False) # False
'False'
str(True) # True
'True'
str(None) # None
'None'
int を渡した結果
str 関数に、int(整数)を渡した結果です。
str(1) # 1
'1'
str(-1) # -1
'-1'
str(0) # 0
'0'
float を渡した結果
str 関数に、float(浮動小数点数)を渡した結果です。
str(float('nan')) # nan
'nan'
str(float('inf')) # inf
'inf'
str(-0.1) # -0.1
'-0.1'
str(0.0) # 0.0
'0.0'
str(-0.0) # -0.0
'-0.0'
complex を渡した結果
str 関数に、complex(複素数)を渡した結果です。
(Python) class complex([real[, imag]])
str(complex(+3.0, +4.0)) # (3+4j)
'(3+4j)'
str(complex(+0.0, +0.0)) # 0j
'0j'
str(complex(-0.0, -0.0)) # (-0-0j)
'(-0-0j)'
str(complex(float('-inf'), 4.0)) # (-inf+4j)
'(-inf+4j)'
str(complex(float('nan'), 4.0)) # (nan+4j)
'(nan+4j)'
Decimal を渡した結果
str 関数に、Decimal 型(十進数型)を渡した結果です。
(Python) class decimal.Decimal(value="0", context=None)
from decimal import Decimal
str(Decimal(2)) # Decimal('2')
'2'
from decimal import Decimal
str(Decimal(0.0)) # Decimal('0')
'0'
from decimal import Decimal
str(Decimal(-0.0)) # Decimal('-0')
'-0'
from decimal import Decimal
str(Decimal(-0.1)) # Decimal('-0.1000000000000000055511151231257827021181583404541015625')
'-0.1000000000000000055511151231257827021181583404541015625'
from decimal import Decimal
str(Decimal('-inf')) # Decimal('-Infinity')
'-Infinity'
from decimal import Decimal
str(Decimal('nan')) # Decimal('NaN')
'NaN'
datetime.datetime を渡した結果
str 関数に、datetime.datetime を渡した結果です。
import datetime
str(datetime.datetime.max) # datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
'9999-12-31 23:59:59.999999'
datetime.timedelta を渡した結果
str 関数に、datetime.timedelta を渡した結果です。
import datetime
str(datetime.timedelta(0)) # datetime.timedelta(0)
'0:00:00'
import datetime
str(datetime.timedelta.max) # datetime.timedelta(days=999999999, seconds=86399, microseconds=999999)
'999999999 days, 23:59:59.999999'
str(object=b'', encoding='utf-8', errors='strict')
str 関数に、bytes、encoding、errors を渡した結果です。
バイト列を文字列にデコードすることができました。
str 関数の説明によると、str(bytes, encoding, errors)
は、bytes.decode(encoding, errors)
と等価である、とのことでした。
(Python) class str(object=b'', encoding='utf-8', errors='strict')
(Python) bytes.decode(encoding="utf-8", errors="strict")
(Python) 標準エンコーディング ('ascii', 'utf-8', ...
)
(Python) エラーハンドラ ('strict', 'ignore', 'replace', ...
)
str(b'', encoding='utf-8', errors='strict')
''
str(b'a', encoding='utf-8', errors='strict')
'a'
'あ'
を 'utf-8'
でエンコードしたときのバイト列 (bytes) です。
'あ'.encode('utf-8')
b'\xe3\x81\x82'
'あ'.encode('utf-8')
のバイト列は、当然のことながら、'utf-8'
でデコードできました。
なので、errors を指定しても、効果はありませんでした。
str(b'\xe3\x81\x82', encoding='utf-8', errors='strict')
'あ'
str(b'\xe3\x81\x82', encoding='utf-8', errors='ignore')
'あ'
str(b'\xe3\x81\x82', encoding='utf-8', errors='replace')
'あ'
str(b'\xe3\x81\x82', encoding='utf-8', errors='backslashreplace')
'あ'
str(b'\xe3\x81\x82', encoding='utf-8', errors='surrogateescape')
'あ'
'あ'.encode('utf-8')
のバイト列は、'ascii'
だと、デコードできませんでした。
なので、errors の内容に応じて、結果が変わりました。
str(b'\xe3\x81\x82', encoding='ascii', errors='strict')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
str(b'\xe3\x81\x82', encoding='ascii', errors='ignore')
''
str(b'\xe3\x81\x82', encoding='ascii', errors='replace')
'���'
str(b'\xe3\x81\x82', encoding='ascii', errors='backslashreplace')
'\\xe3\\x81\\x82'
str(b'\xe3\x81\x82', encoding='ascii', errors='surrogateescape')
'\udce3\udc81\udc82'
'xmlcharrefreplace'
と 'namereplace'
は、文字列をバイト列にエンコードするときに、使用するものでした。
なので、エラーになりました。
(Python) エラーハンドラ ('strict', 'ignore', 'replace', ...
)
str(b'\xe3\x81\x82', encoding='ascii', errors='xmlcharrefreplace')
TypeError: don't know how to handle UnicodeDecodeError in error callback
str(b'\xe3\x81\x82', encoding='ascii', errors='namereplace')
TypeError: don't know how to handle UnicodeDecodeError in error callback
以上です。