Python在项目中的实战-字符串
一、字符串的介绍
字符串是Python中最常用的数据类型,项目中基本都会使用到,我们可以使用引号('或")来创建字符串。
首先,我们来定义一个字符串参数。
>>> str_var = "Python"
二、字符串切片
在Python中没有单字符,一个字符就是长度为1的字符串,字符串可以被索引,如下所示:
字符串的切片&索引获取字符串
>>> str_var = "Python" >>> str_var[0] 'P' >>> str_var[:3] 'Pyt' >>> str_var[2:] 'thon'
通过反向索引获取字符串
>>> str_var = "Python" >>> str_var[-1] 'n'
ps:字符串、整型、元组都是不可变类型,不可修改,否则会报错,如下所示:
>>> a = "python" >>> a[0] = a Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment
三、字符串拼接
字符串的拼接在项目实战中还是比较常见的操作,会有以下几种方式:
1、字符串直接拼接
>>> "python""Python" 'pythonPython'
2、+号拼接
参数与纯字符串的拼接 >>> var1 = "Python" >>> var2 = "C++" >>> var1 + " and " + var2 'Python and C++'
3、使用.join拼接
将列表内元素用逗号拼接成字符串,我们也可以把","替换成"$"、"#"等等 >>> language = ["C++","C#","python","java","go","lua"] >>> ",".join(language) 'C++,C#,python,java,go,lua'
四、字符串运算
Pyhton给用户提供了方便灵活的字符串运算,表中列出了可以用于字符串运算的运算符。
| 运算符 | 描述 | 举例 |
|---|---|---|
| + | 字符串拼接 | >>> a = "python" >>> b = " and " >>> c = "c++" >>> a + b + c 'python and c++' |
| * | 重复运算符输出 | >>> l = "python" >>> l * 3 'pythonpythonpython' |
| [] | 根据索引获取运算符 | >>> l = "python" >>> l[0] 'p' |
| [:] | 切割字符串 | >>> l = "python" >>> l[1:3] 'yt' |
| in | 成员运算符(如果字符串中包含指定字符则返回True) | >>> l = "python" >>> "p" in l True |
| not in | 成员运算符(如果字符串中不包含指定字符则返回True) | >>> l = "python" >>> "j" not in l True |
| % | 格式化字符串 | >>> a = "python" >>> b = "c++" >>> "I like %s and %s" %(a,b) 'I like python and c++' |
| r/R | 输出原始字符串,不进行转义,仅仅输出原始字面意思字符串 | >>> print("换行\n") 换行 >>> print(r"换行\n") 换行\n >>> print(R"换行\n") 换行\n |
五、字符串格式化
1、f-string格式化
Python3以上版本才能使用f-string格式化。
>>> a = "python"
>>> b = "c++"
>>> f"I like {a} and {b}"
'I like python and c++'2、format格式化
>>> a = "python"
>>> b = "c++"
>>> "I like {} and {}".format(a,b)
'I like python and c++'
还可指定格式化指定位置参数,如下:
>>> a = "python"
>>> b = "c++"
>>> "I like {1} and {0}".format(a,b)
'I like c++ and python3、%格式化
| 占位符 | 描述 | 举例 |
|---|---|---|
| %s | 格式化字符串 | >>> a = "python" >>> b = "c++" >>> "I like %s and %s" %(a,b) 'I like python and c++' |
| %d | 格式化整数 | >>> '%d-%d' % (5.4, 1) '5-1' |
| %f | 格式化浮点数字,可指定保留小数位 | >>> "%.2f" %(3.1567) '3.16' |
| %x | 格式化无符号十六进制数 | >>> "%d to hex is %x" %(97,97) '97 to hex is 61' |
六、字符串常用内建函数
以下是字符串常用内建函数,同时我会给工作中常用内建函数举例说明,无举例内建函数为使用次数极少的,了解即可。
| 方法符 | 描述 | 示例 |
|---|---|---|
| string.capitalize() | 将字符串的第一个字符大写 | >>> str = "python" >>> str.capitalize() 'Python' |
| string.count(str, beg=0, end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 | >>> str = "python python" >>> str.count('n') 2 |
| string.decode(encoding='UTF-8', errors='strict') | 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 'ignore' 或者'replace' | >>> str = "python" >>> str.decode('utf8') u'python' |
| string.encode(encoding='UTF-8', errors='strict') | 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace' | str = "python" >>> str.encode('utf8') 'python' |
| string.find(str, beg=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 | >>> str = "python" >>> str.find("n") 5 >>> str.find("a") -1 |
| string.format() | 格式化字符串 | >>> "I like {}".format("python") 'I like python' |
| string.index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在 string中会报一个异常. | >>> str = "python" >>> str.index("n") 5 >>> str.index("a") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: substring not found</module></stdin> |
| string.join(seq) | 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 | >>"".join(["p","y","t","h","o","n"]) 'python' |
| string.split(str="", num=string.count(str)) | 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串 | >>> str = "python,c++,php,C#" >>> str.split(",") ['python', 'c++', 'php', 'C#'] |
| string.lower() | 转换 string 中所有大写字符为小写. | >>> str = "Python" >>> str.lower() 'python' |
| string.upper() | 转换 string 中的小写字母为大写 | >>> str = "python" >>> str.upper() 'PYTHON' |
| string.title() | 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) | >>> str = "python" >>> str.title() 'Python' |
| string.lstrip() | 截掉 string 左边的空格 | >>> str = " Python" >>> str.lstrip() 'Python' |
| string.rstrip() | 删除 string 字符串末尾的空格. | >>> str = "Python " >>> str.lstrip() 'Python' |
| string.strip([obj]) | 在 string 上执行 lstrip()和 rstrip() | >>> str = " Python " >>> str.strip() 'Python' |
| string.maketrans(intab, outtab]) | maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 | |
| max(str) | 返回字符串 str 中最大的字母。 | >>> str = "python" >>> max(str) 'y' |
| min(str) | 返回字符串 str 中最小的字母。 | >>> str = "python" >>> min(str) 'h' |
| string.endswith(obj, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. | |
| string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 | |
| string.center(width) | 返回一个原字符串居中,且使用空格填充至长度为width的新字符串 | |
| string.expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。 | |
| string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False | |
| string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False | |
| string.isdecimal() | 如果 string 只包含十进制数字则返回 True 否则返回 False. | |
| string.isdigit() | 如果 string 只包含数字则返回 True 否则返回 False. | |
| string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False | |
| string.isnumeric() | 如果 string 中只包含数字字符,则返回 True,否则返回 False | |
| string.isspace() | 如果 string 中只包含空格,则返回 True,否则返回 False. | |
| string.istitle() | 如果 string 是标题化的(见 title())则返回 True,否则返回 False | |
| string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False | |
| string.partition(str) | 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string. | |
| string.replace(str1, str2, num=string.count(str1)) | 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次. | |
| string.rfind(str, beg=0,end=len(string) ) | 类似于 find() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1。 | |
| string.rindex( str, beg=0,end=len(string)) | 类似于 index(),不过是从右边开始. | |
| string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 | |
| string.rpartition(str) | 类似于 partition()函数,不过是从右边开始查找 | |
| string.splitlines([keepends]) | 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 | |
| string.startswith(obj, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. | |
| string.swapcase() | 翻转 string 中的大小写 | |
| string.translate(str, del="") | 根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中 | |
| string.zfill(width) | 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0 |
七、字符串常用转义
在Python中,如果要输出特殊字符,或者换行之类就需要转义,用""表示转义,下面介绍一些实战中常用转义字符:
| 转义字符 | 描述 | 示例 |
|---|---|---|
| |续航符,比如一行字太长我们需要分两段写,这个时候我们可以使用\续行,输出的时候依然是一行文字 | ||
| \n | 换行符 | >>> print("换行\n") 换行 |
| \r | 回车 | |
| \t | 制表符 | |
| \' | 输出单引号 | >>> print(''') ' |
| \" | 输出双引号 | >>> print('"') " |
| \ | 输出\ | >>> print('\') \ |

