脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python中bytes和str的区别与联系详解

Python中bytes和str的区别与联系详解

2022-12-15 10:48斯曦巍峨 Python

Python3最重要的新特性之一是对字符串和二进制数据流做了明确的区,下面这篇文章主要给大家介绍了关于Python中bytes和str区别与联系的相关资料,需要的朋友可以参考下

Bytes和Str的区别

在Python3中,字符序列有两种类型:bytes和str。bytes类型是无符号的8位值(通常以ASCII码显式),而str类型是Unicode代码点(code point)。代码点指编码字符集中,字符所对应的数字。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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)和二进制数据(bytes)有着严格的区分,不能混用。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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间的转换

str类型和bytes类型间可以相互转换。

str到bytes的转换需要调用encode()方法。

bytes到str间的转换需要调用decode()方法。

?
1
2
3
4
5
6
7
8
9
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参数用来指定具体的编码规则。

读写文件的注意事项

当要将bytes类型写入到文件中时,必须指定mode=wb。读取二进制文件时可以指定mode=rb或者指定编码方式,使用后者时读出来的就不是bytes类型的字符序列了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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数据时,只需要注意下编码方式即可,最好是显式的传递encoding参数。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)
# 涓栫晫浣犲ソ

总结

到此这篇关于Python中bytes和str区别与联系的文章就介绍到这了,更多相关Python bytes和str区别内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_42103091/article/details/124573589

延伸 · 阅读

精彩推荐
  • Python对python3新增的byte类型详解

    对python3新增的byte类型详解

    今天小编就为大家分享一篇对python3新增的byte类型详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    杰琼王子7902021-04-25
  • Python删除pycharm鼠标右键快捷键打开项目的操作

    删除pycharm鼠标右键快捷键打开项目的操作

    这篇文章主要介绍了删除pycharm鼠标右键快捷键打开项目的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    逐风之翼10912021-08-26
  • PythonPython中的引用和拷贝规律详解

    Python中的引用和拷贝规律详解

    在python中无论是直接的变量赋值,还是参数传递,都是按照引用进行赋值的,这篇文章主要给大家介绍了关于Python中引用和拷贝规律的相关资料,文中通过示例代...

    Ofnoname8982022-11-08
  • Python十二种必须掌握的降维知识(Python代码)

    十二种必须掌握的降维知识(Python代码)

    是否曾经处理过具有一千多个特征的数据集?5万多个特征呢?我曾经有过,让我告诉你这是一项非常具有挑战性的任务,特别是如果你不知道从哪里开始的...

    今日头条3282020-10-09
  • PythonPython+Tkinter绘制一个数字时钟

    Python+Tkinter绘制一个数字时钟

    这篇文章主要为大家详细介绍了Python使用Tkinter绘制一个数字时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    严长生9602022-08-27
  • PythonPython 不设计 do-while 循环结构的理由

    Python 不设计 do-while 循环结构的理由

    Python作为一种语言不支持do-while循环。 但是,我们可以采用一种变通方法来模拟do-while循环 。下面通过本文给大家分享下Python 不设计do-while 循环结构的理由...

    豌豆花下猫5852022-08-28
  • Python深入理解Python中range和xrange的区别

    深入理解Python中range和xrange的区别

    这篇文章主要介绍了深入理解Python中range和xrange的区别,从用法和输出等方便详细介绍了之间的差别。...

    huangbiquan5342020-12-20
  • Python使用TensorFlow实现SVM

    使用TensorFlow实现SVM

    这篇文章主要为大家详细介绍了使用TensorFlow实现SVM的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    sdoddyjm6810712021-04-01