一、编码
计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535
,4个字节可以表示的最大整数是4294967295
。
ASCII编码(美国信息交换标准代码),它通常是用1个字节表示一个字符,它用数字0~127来表示计算机键盘上有的字符以及被称为控制代码的某些特殊值,用于协调信息的发送和接受。大写字母A~Z由值65~90表示,小写字母a~z由值97~122表示。
Unicode编码把所有语言都统一到一套编码里,但它最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
如果统一成Unicode编码,乱码问题从此消失。但是,如果文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。所以出现了把Unicode编码转化为“可变长编码”的UTF-8
编码。
UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。实际上ASCII编码可以被看成是UTF-8编码的一部分。
以上是ASCII、Unicode和UTF-8的关系,总结一下现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
在最新的Python 3版本中,字符串是以Unicode编码的,即Python的字符串支持多语言的。在操作字符串时,我们经常遇到str
和bytes
的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str
和bytes
进行转换。str通过encode()
方法可以编码为指定的bytes
;相反,把bytes通过decode()方法可
变为str
。
二、字符串操作
它通过将两个字符串粘合在一起来构建字符串;
1 str1 = "Good" 2 str2 = "Luck" 3 str3 = str1 + str2 4 print(str3)
结果为:
1 GoodLuck
它通过字符串与多个自身连接来构建字符串;
1 str1 = "Good" 2 str2 = "Luck" 3 str3 = str1 * 2 4 print("str3:", str3) 5 str4 = 3 * str2 6 print("str4:", str4)
结果为:
1 str3: GoodGood 2 str4: LuckLuckLuck
它给出字符串含有多少个字符;
str = "GoodLuck"
print("str的长度为:", len(str))
结果为:
str的长度为: 8
字符串是一个字符序列,通常访问组成字符串的单个字符可以通过索引来完成,在n个字符的字符串中,索引从0开始,n-1结束。Python中还允许用负数索引,从字符串右端索引。字符串索引的一般形式为:
<string>[<expr>]
1 str = "GoodLuck" 2 print("str的长度为:", len(str)) 3 print("str第一个字符:", str[0]) 4 print("str第三个字符:", str[2], "str第五个字符:", str[4]) 5 print("str最后一个字符:", str[len(str)-1]) 6 print("str最后一个字符:", str[-1]) 7 print("str倒数第二个字符:", str[-2])
结果为:
1 str的长度为: 8 2 str第一个字符: G 3 str第三个字符: o str第五个字符: L 4 str最后一个字符: k 5 str最后一个字符: k 6 str倒数第二个字符: c
索引返回的是字符串的单个字符,若需要从字符串中访问连续的字符序列或子字符串,则可以用切片来实现。切片的形式是:
<string>[<start>: <end>]
切片产生从start直到(但不包括)end位置给出的子串。
1 str = "Hi jack,Good Luck!" 2 print("str[0:3]:", str[0:3]) 3 print("str[3:14]:", str[3:14]) 4 print("str[:8]:", str[:8]) 5 print("str[8:]:", str[8:]) 6 print("str[:]:", str[:])
结果为:
1 str[0:3]: Hi 2 str[3:14]: jack,Good L 3 str[:8]: Hi jack, 4 str[8:]: Good Luck! 5 str[:]: Hi jack,Good Luck!
三、字符串内置函数
首字符会转换成大写,其余字符会转换成小写。首字符如果是非字母,首字母不会转换成大写,会转换成小写。
返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
用于计字符串里某个子串的次数。可选参数为在字符串搜索的开始与结束位置。
用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。
find(str, beg=0 end=len(string))
检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。index(str, beg=0, end=len(string))
跟find()方法一样,只不过如果str不在字符串中会报一个异常。isalnum()
如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False。isalpha()
如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False。islower()
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False。isnumeric()
如果字符串中只包含数字字符,则返回 True,否则返回 False。isspace()
如果字符串中只包含空白,则返回 True,否则返回 False。istitle()
如果字符串是标题化的(见 title())则返回 True,否则返回 False。isupper()
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False。join(seq)
以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串。len(string)
返回字符串长度。ljust(width[, fillchar])
返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。lower()
转换字符串中所有大写字符为小写。lstrip()
截掉字符串左边的空格或指定字符。max(str)
返回字符串 str 中最大的字母。min(str)
返回字符串 str 中最小的字母。replace(old, new [, max])
把将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。rfind(str, beg=0,end=len(string))
类似于 find()函数,不过是从右边开始查找。rindex( str, beg=0, end=len(string))
类似于 index(),不过是从右边开始。rjust(width,[, fillchar])
返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串。rstrip()
删除字符串字符串末尾的空格。split(str="", num=string.count(str))
num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串。splitlines([keepends])
按照行(‘\r‘, ‘\r\n‘, \n‘)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。strip([chars])
在字符串上执行 lstrip()和 rstrip()。swapcase()
将字符串中大写转换为小写,小写转换为大写。title()
返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())。upper()
转换字符串中的小写字母为大写。zfill (width)
返回长度为 width 的字符串,原字符串右对齐,前面填充0。isdecimal()
检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。
原文:https://www.cnblogs.com/cxq0223/p/8971052.html