Python:编码与字符串

时间:2023-01-04 12:27:12

编码

在Python3中,字符串的默认编码方式是UTF-8,因此可以直接处理中文。
Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,这使得两者的区分特别清晰。

不管怎样,字符串和字节包之间的界线是必然的,它们的关系是:

str >>>encode>>> bytes
str <<<decode<<< bytes

即字符串可以编码成字节包,而字节包可以解码成字符串。
编码(encode)的作用,就是使我们看到的直观的字符转换成计算机内的字节形式。
解码(decode)正好相反,是把字节包转换成我们能理解的字符。
例如:

>>> '中'.encode()
b'\xe4\xb8\xad'
>>> b'\xe4\xb8\xad'.decode()
'中'

在Python3中,以字节形式表示的字符串则必须加上前缀b,也就是写成上文的b’xxxx’形式。
传入encode和decode的参数是编码(或codec)。编码是一种用二进制数据表示抽象字符的方式。目前有很多种编码。上面给出的UTF-8是其中一种,下面是另一种:

>>> '€20'.encode('iso-8859-15')
b'\xa420'
>>> b'\xa420'.decode('iso-8859-15')
'€20'

Python3中的编码转换

Python3中,字符在计算机内存中是统一以Unicode编码的。只有在字符要被写进文件、存进硬盘或者从服务器发送至客户端(例如网页前端的代码)时会变成utf-8。
如果要得到一个字符串的Unicode形式的二进制表示,可以:

xxxx.encode('unicode-escape')
# 如:
>>> '中'.encode('unicode-escape')
b'\\u4e2d'

如果已知Unicode,要得到其字符串,可以:

xxxx.decode('unicode-escape')
# 如:
>>> b'\\u4e2d'.decode('unicode-escape')
'中'

那么,如果已知一个字符串的Unicode表示,如何得到它的UTF-8表示呢?答案是先decode,再encode。

​xxx.decode('unicode-escape').encode()
# 如
>>> b'\\u4e2d'.decode('unicode-escape').encode()
b'\xe4\xb8\xad'

字符串

声明字符串

在Python中声明一个字符串通常有三种方法:在它的两边加上单引号、双引号或者三引号。

print('hello world')
print("hello world")
print('''hello world''')

在Python中用这三种声明方法来声明字符串意义完全等同的,即’hello world’和”hello world”以及”’hello world”’是没有任何区别的。

读取键盘输入:input函数

Python3中,使用input函数在屏幕上显示提示信息,并把用户的输入返回给a,格式是str

>>> my_input = input('enter a number: ')
enter a number: 123
>>> type(my_input)
<class 'str'>

格式化输出

Python中的格式化输出和C语言类似,基本格式如下:

  print('....%formmat..' %(var...))

当var只有一个时,括号可以省略。
例如:

var=2
print'the value of var is %d.' %var
>>>the value of var is 2.
boys=3
girls=4
print ('%d girls and %d boys.' %(girls,boys)
>>>4 girls and 3 boys.

按照科学计数法输出

无精度要求的科学计数法浮点输出:

print(format(12345.6789, 'e'))

输出结果为:

1.234568e+04

有精度要求的科学计数法浮点输出:

print(format(12345.6789, '.2e'))

输出结果为:

1.23e+04

上面format格式控制字里的2是指保留小数点后两位。 

常用的string函数与方法

len(s)  #返回字符串长度
int(s) #将字符串转换成整形
ord(s)与chr(ASCII)  #将一个字符与ASCII码相互转换

str.strip('x') #消去头尾处,指定字符x,默认是空格
str.lstrip() #消去左边的空格
str.rstrip() #消去右边的空格
str.split(' ',num) #按照指定的分隔符,默认是空格,对str进行切片。其中num可选,表示分割次数
str.index(str2,beg=0,end=len(str)) #str2是str的子串,返回str2开始的索引位置

#密码一般都要求为字母加数字,这样可以判断密码是否过于简单

islow() 判断字符串是否小写
isupper() 判断大写
isspace() 判断空字符串
lower() 变成小写
upper() 变成大写

#字符串的查找函数
str.startswith('x') #判断str是否以x开头
str.endswith('x') #判断str是否以x结尾
str.find('x') #判断str中是否存在x

字符串的替换

python 字符串替换可以用2种方法实现:

  1. 用字符串对象本身的方法
  2. 用正则来替换字符串

下面用个例子来实验下:

a = 'hello word'

要把a字符串里的word替换为python。

用字符串本身的replace方法

a.replace('word','python')

输出的结果是hello python

用正则表达式来完成替换

import re
strinfo = re.compile('word')
b = strinfo.sub('python',a)
print b

输出的结果也是hello python