1、String 字符串
- 所谓字符串,就是由零个或多个字符组成的有限序列,用来记录文本信息。
- Python中的字符串用单引号 ' 、双引号 " 、三单引号'''、三双引号""" 括起来。
- 单引号内可以包含双引号,双引号内可以包含单引号。
- 三引号字符串中的换行会自动转换为换行符'\n',三引号内可以包含单引号和双引号。
1.1 转义字符
字符串中使用\
(反斜杠)来表示转义,也就是说\
后面的字符不再是它原来的意义。
转义字符 | 描述 |
---|---|
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\' | 单引号 |
\" | 双引号 |
\a | 响铃 (发出响声) |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\0yy | 八进制数,yy代表的字符,例如:\12代表换行 |
\xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出, |
\unicode | \u9a86 “骆” 字 |
raw字符串(原始字符串)
格式:r'字符串内容'
作用:让转义符号 \ 无效
1.2 字符串运算符
操作符 | 描述 | 实例 eg:a="Hello" b="Python" |
+ | 字符串连接 | a + b : HelloPython |
* | 重复输出字符串 | a*2 :HelloHello |
[] | 通过索引获取字符串中的字符 | a[1] : e |
[ : ] | 截取字符串中的一部分,左闭右开。 | a[1:4] : ell |
in | 成员运算符,包含返回True | 'H' in a : True |
not in | 成员运算符,不包含返回True | 'M' not in a: True |
r/R | 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写,无区别)以外,与普通字符串有着几乎完全相同的语法。 | print(r"hello\nhello"): hello\nhello |
% | 格式化字符串 | print ("学习 %s " % b):学习Python |
1.3 字符串格式化 参考:https://www.cnblogs.com/poloyy/p/12443158.html
字符串格式化两种方式: % format
format格式化函数:三种方式。最好不要混合使用,容易出问题。
#1、不设置指定位置,按默认顺序
print("{}{}{}{}".format(1,2,3,4))
运行结果:1234
#2、设置指定位置,从0开始。
print("{1}{0}{2}{3}".format(1,2,3,4))
运行结果:2134
#3、带关键字传输。
print("今天是{name}的{key}生日会".format(22, 11, name="帅哥", key=18))
print("今天是{name}的{key}生日会,接着上{}".format("test", name="帅哥", key=18))
运行结果:今天是帅哥的18生日会
今天是帅哥的18生日会,接着上test
注意:下面会报错
# print("今天是{0}的{}生日会".format("帅哥", 18))
# print("今天是{name}的{key}生日会,接着上{}".format( name="帅哥", key=18,"test"))
当你只写了 {} 时,默认按传入的值的顺序读取
当你写了数字编号 {1} ,则可以读取对应位置上的值,从0开始
当你指定了关键字 {name} ,如果不指定 name=xxx ,则会报错
当你指定了关键字,又只写了 {} 时,你传入带有关键字指定的值必须写在后面,类似函数(形参在前,实参在后)
{} 和 {1} 是不能共存的
字符串格式化符号 | |
符 号 | 描 述 |
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令 | |
符号 | 功能 |
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
2、字符串的方法
- 类型判断
- str.islower() 是否全为小写
- str.isupper() 是否全为大写
- str.istitle() 是否为标题,即各单词首字母大写
- str. isspace() 判断字符串是否是空白(空格、制表符、换行符等)字符,没有任何字符是不算是空白。
- str.isalpha() 是否全为字母
- str.isalnum() 是否全为字母或数字
- str.isdigit() 如果字符串只包含数字则返回 True 否则返回 False
- str.isnumeric()是否只包含数字字符
- str.isdecimal()是否只包含十进制数字字符
- str. isidentifier()是否满足标识符定义规则,可用来判断变量名是否合法。如果字符串仅包含字母数字字母(az)和(0-9)或下划线 (_),则该字符串被视为有效标识符。有效的标识符不能以数字开头或包含任何空格。
- str. isprintable() 是否是可打印字符(例如制表符、换行符就不是可打印字符,但空格是)
a = "python"
a.islower() #True 是否全为小写
a.istitle() #False 是否是标题
a. isspace() #False 是否包含空格
a.isalpha() #True 是否全是字母
a.isalnum() #True
a.isdigit() #False
a.isnumeric() #False
a.isdecimal() #False
a. isidentifier() #True
a. isprintable() #True
- 大小写(字符串本身不改变,会返回改变后的值)
- str. lower() 全部转换为小写
- str. upper() 全部转换为大写
- str. capitalize() 转换为首字母大写,其他字母小写
- str. title() 转换为各单词首字母大写
- str. swapcase() 大小写互换(大写–>小写,小写–>大写)
- str. casefold() 转换为大小写无关字符串比较的格式字符串其效果和 lower() 方法非常相似,都可以转换字符串中所有大写字符为小写。两者的区别是:lower() 方法只对ASCII编码,也就是‘A-Z’有效,对于其他语言(非汉语或英文)中把大写转换为小写的情况只能用 casefold() 方法。
a = "Python"
print(a.lower()) #python is the best language!
print(a.upper()) #PYTHON IS THE BEST LANGUAGE!
print(a.capitalize()) #Python is the best language!
print(a.title()) #Python Is The Best Language!
print(a.swapcase()) #pYTHON IS THE BEST LANGUAGE!
print(a.casefold()) #python is the best language!
- 字符串的填充与对齐
- str. center (width[, fillchar]) 将字符串居中左右两边使用fillchar进行填充, 使得整个字符串的长度为width。fllchar默认为空格。如果width小于 字符串的长度,则无法填充直接返回字符串本身(不会创建新字符串对象)。
- str. ljust(width[, fillchar]) 左对齐 ljust()使用fillchar填充在字符串S的右边,使得整体长度为width。
- str. rjust (width[, fillchar]) 右对齐 rjust()则 是填充在左边。如果不指定fillchar,则默认使用空格填充。如果width小于 或等于字符串S的长度,则无法填充,直接返回字符串S(不会创建新字符串对象)。
- str. zfill (width) 前方补0用0填充在字符串S的左边使其长度为width。如果S前有正负号+/-,则0填充在这两个符号的后面,且符号也算入长度。如果width小于或等 于S的长度,则无法填充,直接返回S本身(不会创建新字符串对象)。
- str. expandtabs([tabsize]) 将字符串S中的\t替换为一定数量的空格。默认N=8。注意,expandtabs(8)不是将\t直接替换为8个空格。例如’xyz\tab’ expandtabs()会将\t替换为5个空格,因为"xyz" 占用了3个字符位。所以,在替换"\t"为空格时,会减掉"\t"前面的字符数量。如果"'t"的前面正好没有字符, 则直接将"\t"替换为N个空格。另外,它不会替换换行符(\n或\r)。
s = "hello"
print(s.center(10,"*")) # **hello***
print(s.ljust(10,"*")) # hello*****
print(s.rjust(10,"*")) # *****hello
print(s.zfill(10)) # 00000hello
str = "runoob\t12345\tabc"
print(str.expandtabs()) # runoob 12345 abc
print(str.expandtabs(10)) # runoob 12345 abc
- 字符串的修剪
- str. strip([chars]) 移除左右两边的字符chars
- str. lstrip([chars]) 移除左边的字符chars
- str. rstrip([chars]) 移除右边的字符chars
- 注意:如果不指定chars或者指定为None,则默认移除空白(空格、制表符、换行符)。
- 唯一需要注意的是,chars可以是多个字符序列。在移除时,只要是这个序列中的字符,都会被移除。
str = " hello# "
print(str.strip())
print(str.lstrip("h "))
print(str.rstrip("#o "))
运行结果:
hello#
ello#
hell
- 字符串的拆分与组合(都是用来分割字符串,并生成一个列表)
- str. split (sep=None, maxsplit=-1) split()根据sep对S进行分割,maxspt于指定分割次数,如果不指定maxsplit或者给定值为"-1", 则会从左向右搜索并且每遇到sep- 次就分割直到搜索完字符串。如果不指定sep或者指定为None,则改变分割算法:以空格为分隔符,且将连续的空白压缩为一一个空格。
- str. rsplit (sep=None, maxsplit=-1) rsplit()和split()是一 样的, 只不过是从右边向左边搜索。
- str. splitlines ([keepends=True]) splitlines()用来专门用来分割换行符。虽然它有点像split("|n’)或split(\r\n"), 但它们有些区别。 splitlines()中可以指定各种换行符,常见的是\n、\r、\rn。 如果指定keepends为True, 则保留所有的换行符。
- str.join 用于将序列中的元素以指定的字符连接生成一个新的字符串。
- S. partition(sep)
- S. rpartition (sep) 搜索字符串S中的子串sep,并从sep处对S进行分割, 最后返回一个包含3元素的元组, sep左边的部分是元组的第一个元素, sep自身是元组的二个元素,sep右边是元组的第三个元素。partition(sep)从左边第一 个sep进行分割,rpartition(sep)从右边第一 个sep进行分割。如果搜索不到sep,则返回的3元素元组中,有两个元素为空。partition()是后两个元素为空,rpartition()是前两个元素为空。
str = "hello#world#I#love#you!"
print(str.split("#"))
print(str.rsplit("#",2))
print(str.splitlines(True))
print(str.partition("#"))
print(str.rpartition("#"))
运行结果:
['hello', 'world', 'I', 'love', 'you!']
['hello#world#I', 'love', 'you!']
['hello#world#I#love#you!']
('hello', '#', 'world#I#love#you!')
('hello#world#I#love', '#', 'you!')
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
运行结果:
r-u-n-o-o-b
runoob
- 字符串的替换
- str. replace(old, new[, count]) 将字符串中的子串old替换为new字符串,如果给定count, 则表示只替换前count个old子串。 如果S中搜索不到子串old,则无法替换,直接返回字符串S(不创建新字符串对象)。
- str. translate (table)
- str. maketrans(x[, y[, z]]) 注:Python3.4 已经没有 string.maketrans() 了,取而代之的是内建函数: bytearray.maketrans()、bytes.maketrans()、str.maketrans() 。
- str.maketrans()生成一一个字符一一 映射的table,然后使用translate(table)对字符串S中的每个字符进行映射。
- translate()实现的功能和Linux中的tr命令是类似的。
- 注意,maketrans(x[, y[, z1])中的x和y都是字符串,且长度必须相等。
- 如果maketrans(x[, y[, z])给定了第三个参数z,则这个参数字符串中的每个字符都会被映射为None。
str = "hello#world#I#love#you!"
print(str.replace("#", "-",3))
运行结果:hello-world-I-love#you!
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab) # 制作翻译表
str = "this is string example....wow!!!"
print (str.translate(trantab))
运行结果:th3s 3s str3ng 2x1mpl2....w4w!!!
- 字符串的测试与查找
- str. startswith (prefix[, start[, end]])
- str. endswith(suffix[, start[, end]])
- endswith()检查字符串str是否以suffix结尾,返回布尔值的True和False。
- suffix,prefix可 以是一一个元组(tuple)。可以指定起始start和结尾end的搜索边界。
- 同理startswith()用来判断字符串str是否是以prefix开头。
- 举例:
- 1.suffix是普通的字符串时
- 2.suffix是元组tuple时,只要tuple中任意一个 元素满足endswith的条件,就返回True。
str = "hello"
print(str.startswith("he"))
print(str.endswith("l"))
运行结果:
True
False
- str. find(sub[, start[, end]])
- str. rfind(sub[, start[, end]])
- str. index(sub[, start[, end]])
- str. rindex (sub[, start[, end]])
- str.conut() 统计子串出现的次数
- find()搜索 字符串S中是否包含子串sub,如果包含,则返回sub的索引位置,否则返回"-1"。可以指定起始start和结束end的搜索位置。
- rfind()则是返回搜索到的最右边子串的位置,如果只搜索到一个或没有搜索到子串,则和find()是等价的。同理rindex()。
- index()和find()一样,唯一不同点在于当找不到子串时,抛出ValueError错误。
str = "hello"
print(str.find("l"))
print(str.rfind("l"))
print(str.index("l"))
print(str.rindex("l"))
print(str.count("l"))
运行结果:
2
3
2
3
2
- 字符串的函数
- ord(c) 返回一个字符串的Unicode值
- chr(i) 返回i这个值所对应的字符
- hex(i) 将整数转换为十六进制的字符串
- oct(i) 将整数转换为八进制的字符串
- bin(i) 将整数转换为二进制的字符串
- str(obj="") 对象转换为字符串
- 编码解码
str = "菜鸟教程";
str_utf8 = str.encode("UTF-8")
str_gbk = str.encode("GBK")
print(str)
print("UTF-8 编码:", str_utf8)
print("GBK 编码:", str_gbk)
print("UTF-8 解码:", str_utf8.decode('UTF-8','strict'))
print("GBK 解码:", str_gbk.decode('GBK','strict'))
运行结果:
菜鸟教程
UTF-8 编码: b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b'
GBK 编码: b'\xb2\xcb\xc4\xf1\xbd\xcc\xb3\xcc'
UTF-8 解码: 菜鸟教程
GBK 解码: 菜鸟教程