python3,字符串,string,字符编码
Python内置数据类型总结(字符串)
字符串是Python中最常用的数据类型之一,使用单引号、双引号、三引号来括起来表示,三引号表示多行字符串,平常使用单引号或双引号就行。如有单、双引号嵌套时,可使用反斜杠【\】进行转义,或者使用不是嵌套中的引号,例如 var = 'This is "dog"!'。
字符串是不可变的序列数据类型,不能修改字符串本身,和数字类型一样!Python完全支持Unicode编码,所有的字符串都是Unicode字符串。虽然字符串本身不可变,但是可以像列表一样进行切片和截取子串操作,但不会引起字符串本身的变化。
1.字符串运算:
下表中a为"Xiao",b为"Shouhua"
操作 | 描述 | 例子 | 结果 |
+ | 字符串拼接(速度慢,少用) | a + b | "XiaoShouhua" |
* | 重复字符串,相当于乘法 | a * 2 | "XiaoXiao" |
[] | 通过索引获取字符串中的字符 | a[2] | "a" |
[ : ] | 截取、切片 | a[2:] | "ao" |
in | 成员运算符,如果字符串中包括给定的字符串,返回True | "X" in a | True |
not in | 同上,不包含返回True | "X" not in a | False |
r/R | 原始字符串,不会转义特殊字符 | print(r"\n") | \n |
2.转义字符串:
转义字符串都有特殊含义,见下表:
转义字符 | 描述 |
\(在行尾时) | 续行符 |
\\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格 |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\o33 | 颜色控制 |
3、字符串内置方法
下表从常用的字符串内置方法开始梳理,常用的都要记住如何使用,不常用的要有印象,以*的个数表示常用的程度。
方法 | 描述 | 使用频率 |
string.split(sep, maxsplit=-1) | 字符串分割,返回对象为分割后的子串列表。默认使用空格分割,可指定分隔符,分隔符不包含在分割后的子串中;默认贪婪分割,可指定分割次数。 | ***** |
string.splitlines([keepends]) | 按照('\r','\r\n','\n')分割字符串,返回一个包含各行作为元素的列表,如果参数keepends为False,不包含换行符,否则保留换行符 | *** |
string.strip([chars]) | 默认返回去除字符串两边空格的字符串,其中有string.lstrip()和string.rstrip()是分别去除左、右各边的空格。可指定去除的字符 | ***** |
string.find(sub[, star[, end]] ) | 返回查找子串出现的第一个位置索引,可以指定查找范围,没有找到子串返回-1。其中string.rfind()是从右边开始查找 | ***** |
string.index(sub[, start[, end]]) | 返回查找子串出现的一个位置索引,可指定查找范围,没有找到会异常ValueError,其中string.rindex()是从右边开始检索 | **** |
string.count(sub[, start[, end]]) | 返回查找子串在字符串中出现的次数,可指定查找范围,没有找到,返回0 | **** |
string.lower() | 返回一个全部为小写的字符串 | **** |
string.upper() | 返回一个全部为大写的字符串 | **** |
string.startswith(prefix[, start[, end]]) | 返回在给定范围中是是否以指定字符串开头,是返回True,否则返回False | **** |
string.endswith(prefix[, start[, end]]) | 返回在给定范围中是是否以指定字符串结尾,是返回True,否则返回False | **** |
string.replace(old, new[, count]) | 返回使用字符串new替换字符串old count次的新的字符串 | **** |
string.encode(encoding='utf-8', errors='strict') | 返回以encoding指定的编码格式编码的bytes对象,如果出错会报一个UnicodeEncodeError异常,除非指定errors是'ignore'或者'replace'。 | **** |
bytes.decode(encoding='utf-8', errors='strict') | 和string.encode是逆向过程,将bytes以指定编码格式解码为string,如果出错会报一个UnicodeEncodeError异常,除非指定errors是'ignore'或者'replace'。 | **** |
string.format() | 格式化字符串,常用方式为位置参数和关键字参数 | ***** |
string.join(seq) | 以指定的string为分隔符,将序列seq中的元素(其中的元素必须是以字符串类型的形式才可以)合并为一个新的字符串 | *** |
string.center(width) | 返回一个原字符串居中,并默认使用空格填充至长度width的新字符串,可指定填充字符串 | **** |
string.ljust(width) | 返回一个原字符串左对齐,并默认使用空格在右侧填充至长度width的新字符串,可指定填充字符串 | *** |
string.rjust(width) | 返回一个原字符串右对齐,并默认使用空格在左侧填充至长度width的新字符串,可指定填充字符串 | ** |
string.zfill(width) | 返回长度为width的字符串,原字符串右对齐,前面填充0 | ** |
string.expandtabs(tabsize=8) | 把字符串string中的tab符号转化为空格,tab默认空格数是8 | ** |
string.capitalize() | 返回首字母大写的字符串 | * |
string.isalnum() | 如果string中至少出现一个字符并且所有的字符都是是字母或数字做返回True,否则返回False | *** |
string.isalpha() | 如果string中至少出现一个字符且所有字符都是字母的则返回True,否则返回False | *** |
string.isdigit() | string中除过汉子数字返回False,其余数字(unicode数字,bytes数字(单字节),全角数字(双字节),罗马数字)都返回True,无Error | *** |
string.isdecimal() | 因为bytes类型数字没有isdecimal属性,会报异常AttributeError,unicode数字、全角数字返回True,罗马数字、汉子数字会返回False | *** |
string.isnumeric() | 因为bytes类型数字没有isnumeric属性,会报异常AttributeError,其余类型数字都返回True | ** |
string.islower() | 只要string中不包含大写字符并且包含至少一个小写字符就会返回True,否则返回False | *** |
string.isupper() | 只要string中不包含小写字符并且包含至少一个大写字符就会返回True,否则返回False | *** |
string.istitle() | 如果string是标题式的字符串,返回True,否则返回False,标题式是:字符串中的单词首字母大写,例如"Title 10Dd" | *** |
string.isspace() | 如果string中只包含空格类型,就返回True,否则返回False。空格类型:' \n\t\v\r\f ' | ** |
string.title(width) | 返回‘标题化’的string,即单词的首字母全部大写,其余字母小写。 | ** |
string.swapcase() | 翻转大小写 | * |
str.maketrans(intab, outtab) | 接受两个长度相同的字符串,第一个字符串是需要转换的字符串,第二个字符串是转化的目标字符串,用于创建字符串映射的转化表 | ** |
string.translagte | 使用str.maketrans()方法转化的转化表进行字符串的转化 | ** |
string.partion(str) | 从左边找str出现的第一个位置起,把字符串string分成一个3元素的元祖(string_pre_str, str, string_post_str),如果string中不包含str,则string_pre_str == string | ** |
string.rpartion() | 从右边找str出现的第一个位置起,把字符串string分成一个3元素的元祖(string_pre_str, str, string_post_str),如果string中不包含str,则string_pre_str == string | ** |
4.编码问题
计算机只能处理二进制数01,所以产生了字符编码,用来将我们人类可读的数据类型转化为二进制。常用编码包括ASCII码、Unicode编码、utf-8编码、GB2312、gbk等。
但在python3中运行时全部使用Unicode编码不会产生任何编码问题,对于编码,要记住三条规则:
操作系统运行时,在内存中统一使用的Unicode编码,当需要将数据保存到硬盘或者网络传输时,就转化为utf-8编码,进行保存和传输;
用文本编辑器的时候,从文件系统或者说硬盘上读取的utf-8编码字符被转换为Unicode编码字符到内存中,程序或操作系统才能使用。编辑完成后,保存时再转换为uft-8进行保存;
浏览网页时,服务器会把Unicode内容转化为utf-8进行传输给客户端浏览器。