欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中bytes和str的區(qū)別與聯(lián)系詳解

 更新時間:2022年05月05日 11:20:32   作者:斯曦巍峨  
Python3最重要的新特性之一是對字符串和二進制數(shù)據(jù)流做了明確的區(qū),下面這篇文章主要給大家介紹了關于Python中bytes和str區(qū)別與聯(lián)系的相關資料,需要的朋友可以參考下

Bytes和Str的區(qū)別

在Python3中,字符序列有兩種類型:bytes和str。bytes類型是無符號的8位值(通常以ASCII碼顯式),而str類型是Unicode代碼點(code point)。代碼點指編碼字符集中,字符所對應的數(shù)字。

a = b'hello world'
print(isinstance(a, bytes))
print(list(a))
print(a)
"""
True
[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
b'hello world'
"""

a = 'hello world'
print(isinstance(a, str))
print(list(a))
print(a)
"""
True
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
hello world
"""

isinstance()方法可以判斷對象的類型,例如這里用來判斷是str還是bytes。

Python3對文本(str)和二進制數(shù)據(jù)(bytes)有著嚴格的區(qū)分,不能混用。

x = b'python'
y = b'java'
z = 'c++'
w = 'c'

print(x + y)
# b'pythonjava'
print(z + w)
# c++c
print(x + z)
# TypeError: can't concat str to bytes

print('python' == b'python')
# False

上述示例中str類型和bytes類型間使用=來比較是否相等不會報錯,但是會返回False。

Bytes與Str間的轉(zhuǎn)換

str類型和bytes類型間可以相互轉(zhuǎn)換。

str到bytes的轉(zhuǎn)換需要調(diào)用encode()方法。

bytes到str間的轉(zhuǎn)換需要調(diào)用decode()方法。

x = b'python'
y = x.decode(encoding='utf-8')
z = y.encode(encoding='utf-8')
print(y)
print(z)
"""
python
b'python'
"""

可以觀察到encode()和decode()方法都有一個encoding參數(shù)用來指定具體的編碼規(guī)則。

讀寫文件的注意事項

當要將bytes類型寫入到文件中時,必須指定mode=wb。讀取二進制文件時可以指定mode=rb或者指定編碼方式,使用后者時讀出來的就不是bytes類型的字符序列了。

x = b'python'

# 錯誤示例
with open('data.bin', mode='w') as fp:
    fp.write(x)
# TypeError: write() argument must be str, not bytes

# 正確示例
with open('data.bin', mode='wb') as fp:
    fp.write(x)

# 讀取二進制文件方式1
with open('data.bin', mode='rb') as fp:
    content = fp.read()
    print(content)
# python

# 讀取二進制文件方式2
with open('data.bin', mode='r', encoding='utf-8') as fp:
    content = fp.read()
    print(content, type(content))
# python <class 'str'>

當讀寫Unicode數(shù)據(jù)時,只需要注意下編碼方式即可,最好是顯式的傳遞encoding參數(shù)。

x = '世界你好'

with open('data.txt', mode='w', encoding='utf-8') as fp:
    fp.write(x)

with open('data.txt', mode='r', encoding='utf-8') as fp:
    content = fp.read()
    print(content)
# 世界你好

# 錯誤示例,編碼方式不對
with open('data.txt', mode='r', encoding='gbk') as fp:
    content = fp.read()
    print(content)
# 涓栫晫浣犲ソ

總結(jié)

到此這篇關于Python中bytes和str區(qū)別與聯(lián)系的文章就介紹到這了,更多相關Python bytes和str區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論