python学习(2)python基础、字符串和编码
来源:互联网 发布:python遍历一个字符串 编辑:程序博客网 时间:2024/06/08 08:55
由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII
编码,比如大写字母A
的编码是65
,小写字母z
的编码是122
。
全世界有上百种语言,日本把日文编到Shift_JIS
里,韩国把韩文编到Euc-kr
里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8
编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:
计算机系统通用的字符编码工作方式:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
对于单个字符的编码,Python提供了ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符
>>> ord('中')20013>>> chr(66)'B'
str
:>>> '\u4e2d\u6587''中文'两种写法完全是等价的。
由于Python的字符串类型是
str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str
变为以字节为单位的bytes
。Python对bytes
类型的数据用带b
前缀的单引号或双引号表示:
x = b'ABC'要注意区分
'ABC'
和b'ABC'
,前者是str
,后者虽然内容显示得和前者一样,但bytes
的每个字符都只占用一个字节。以Unicode表示的str
通过encode()
方法可以编码为指定的bytes
,例如:
>>> 'ABC'.encode('ascii')b'ABC'>>> '中文'.encode('utf-8')b'\xe4\xb8\xad\xe6\x96\x87'纯英文的
str
可以用ASCII
编码为bytes
,内容是一样的,含有中文的str
可以用UTF-8
编码为bytes
。含有中文的str
无法用ASCII
编码,因为中文编码的范围超过了ASCII
编码的范围,Python会报错。在
bytes
中,无法显示为ASCII字符的字节,用\x##
显示。反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes
。要把bytes
变为str
,就需要用decode()
方法:
>>> b'ABC'.decode('ascii')'ABC'>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')'中文'
要计算
str
包含多少个字符,可以用len()
函数:>>> len('ABC')3>>> len('中文')2
len()
函数计算的是str
的字符数,如果换成bytes
,len()
函数就计算字节数:>>> len(b'ABC')3>>> len(b'\xe4\xb8\xad\xe6\x96\x87')6>>> len('中文'.encode('utf-8'))6
可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
在操作字符串时,我们经常遇到str
和bytes
的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str
和bytes
进行转换。
格式化
最后一个常见的问题是如何输出格式化的字符串。
在Python中,采用的格式化方式和C语言是一致的,用%
实现,举例如下:>>> 'Hello, %s' % 'world''Hello, world'>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)'Hi, Michael, you have $1000000.'
%
运算符就是用来格式化字符串的。在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?
占位符,后面就跟几个变量或者值,顺序要对应好。常见的占位符有:
%d整数%f浮点数%s字符串%x十六进制整数其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:>>> '%2d-%02d' % (3, 1)' 3-01'>>> '%.2f' % 3.1415926'3.14'
如果你不太确定应该用什么,
%s
永远起作用,它会把任何数据类型转换为字符串:>>> 'Age: %s. Gender: %s' % (25, True)'Age: 25. Gender: True'
练习
小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%'
,只保留小数点后1位:
#!/usr/bin/env python3# -*- coding: utf-8 -*-s1 = 72s2 = 85r = (s2 -s1)/s2print('%.1f' %r)
小结
Python 3的字符串使用Unicode,直接支持多语言。
str和bytes互相转换时,需要指定编码。最常用的编码是UTF-8。Python当然也支持其他编码方式,比如把Unicode编码成GB2312:
>>> '中文'.encode('gb2312')b'\xd6\xd0\xce\xc4'
但这种方式纯属自找麻烦,如果没有特殊业务要求,请牢记仅使用UTF-8编码。
格式化字符串的时候,可以用Python的交互式命令行测试,方便快捷。
- python学习(2)python基础、字符串和编码
- python基础 字符串和编码
- python学习(5)字符串和编码
- Python学习 字符串和编码
- python基础(二)关于编码和字符串操作etc
- 学习帖-廖雪峰Python教程3.0-Python基础-字符串和编码
- python学习笔记-字符串和编码
- Python学习笔记 - 字符串和编码
- Python学习笔记—字符串和编码
- python学习——字符串和编码
- 【Python学习笔记】字符串和编码
- python 字符串和编码
- python字符串和编码
- Python 字符串和编码
- Python 字符串和编码
- Python 字符串和编码
- Python字符串和编码
- Python字符串和编码
- 搭建Maven私服(使用Nexus)
- 数值计算第一次实验(C语言版)
- MFC 如何改变某个子控件的文本颜色
- 神经网络梯度消失的解释
- 关于Number.toFixed()的总结
- python学习(2)python基础、字符串和编码
- 将自己的python程序打包成exe(秀同学一脸呐)
- 斯坦福大学第七讲-最优间隔分类器
- sdut 3893 Return of the Nim(matrix nim)
- Android常见的几种移动支付
- java 服务器接口快速开发之servlet详细教程
- 【数据结构实验四】数组
- 关于重定向RedirectAttributes的用法
- mongodb 模糊查询