前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >47.python bytearray/bytes/string区别

47.python bytearray/bytes/string区别

作者头像
猿说编程[Python和C]
修改2021-04-27 15:18:25
1.8K0
修改2021-04-27 15:18:25
举报
文章被收录于专栏:猿说编程猿说编程

一.字节与字符的区别

在讲解 bytearray / bytes / string 三者的区别之前,有必要来了解一下字节和字符的区别:

1.字节概念

字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数;

位(bit)是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数;

字节(byte)是计算机中 数据处理 的基本单位,习惯上用大写  B  来表示,1B(byte,字节)= 8bit(位);

代码语言:javascript
复制
1 KB = 1024 B(字节);
1 MB = 1024 KB;  (2^10 B)
1 GB = 1024 MB;  (2^20 B)
1 TB = 1024 GB;  (2^30 B)

2.字符概念

字符 是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等;

一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节;

一般 gbk 编码下,一个汉字 字符 占用 2 个 字节;

3.字符串概念

字符串是字符序列,它是一种抽象的概念,不能直接存储在硬盘 – 字节串是给计算机看的,给计算机传输或者保存的,在Python中,程序中的文本都用字符串表示

4.字节串概念

字节串是字节序列,它可以直接存储在硬盘, 字节串是给计算机看的。它们之间的映射被称为编码/解码 – 字符串是给人看的,用来操作的;

代码语言:javascript
复制
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): https://www.codersrc.com/
 
@File:python_bytes_string_2.py
@Time:2020/2/29 21:25
 
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
 
 
if __name__ == "__main__":
 
    # 字符串str 转 字节bytes
    s = '猿说python'
    b = s.encode()  # 编码,默认的是UTF-8
    print(b)
    print(type(b))
 
    # 字节bytes 转 字符串str
    b = b'\xe7\x8c\xbf\xe8\xaf\xb4python'.decode(encoding='UTF-8')  # 解码
    print(b)
    print(type(b))

输出结果:

代码语言:javascript
复制
b'\xe7\x8c\xbf\xe8\xaf\xb4python'
<class 'bytes'>
猿说python
<class 'str'>

二.str、bytes和bytearray区别

1.str是字符数据(如:文本,给人看的),bytes和bytearray是字节数据(如:二进制数据,给计算机看的),它们都是序列,可以进行迭代遍历。

2.str和bytes是不可变序列,通过str类型的通用函数,比如find()、replace()、islower()等函数修改后实际上是重新创建了新对象;bytearray是可变序列,可以原处修改字节。

3.bytes和bytearray都能使用str类型的通用函数,比如find()、replace()、islower()等,不能用的是str的格式化操作。

4.python 3.x中默认str是unicode格式编码的,例如UTF-8字符集。

三.string与bytes/bytearray相互转换

1.string经过编码encode转化成bytes

代码语言:javascript
复制
if __name__ == "__main__":
    s = "https://www.codersrc.com/"
    # 将字符串转换为字节对象
    b2 = bytes(s, encoding='utf8')  # 必须制定编码格式
    # print(b2)
 
    # 字符串encode将获得一个bytes对象
    b3 = str.encode(s)
    b4 = s.encode()
    print(b3)
    print(type(b3))
    print(b4)
    print(type(b4))

输出结果:

代码语言:javascript
复制
b'https://www.codersrc.com/'
<class 'bytes'>
b'shuopython.com'
<class 'bytes'>

2.bytes经过解码decode转化成string

代码语言:javascript
复制
if __name__ == "__main__":
    # 字节对象b
    b = bytes("python教程-猿说python","utf-8")
 
    #方案一:
    s2 = bytes.decode(b)
    # 方案二:
    s3 = b.decode()
    
    print(s2)
    print(s3)

输出结果:

代码语言:javascript
复制
python教程-猿说python
python教程-猿说python

注意:如果bytes初始化含有中文的字符串必须设置编码格式,否则报错:TypeError: string argument without an encoding

代码语言:javascript
复制
b = bytes("猿说python")
 
>>> b = bytes("猿说python")
>>> TypeError: string argument without an encoding
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.字节与字符的区别
    • 1.字节概念
      • 2.字符概念
        • 3.字符串概念
          • 4.字节串概念
          • 二.str、bytes和bytearray区别
          • 三.string与bytes/bytearray相互转换
            • 1.string经过编码encode转化成bytes
              • 2.bytes经过解码decode转化成string
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档