序列类型也叫容器类型。字符串(String)也是序列类型,本质上是字符序列。字符串是不可变序列,也就是说不能对字符串进行增,删,改等操作。在内存里,字符串存的是保存的所有字符的Unicode码。字符见得最多的就是英文字符(ASCII码)和汉字。Unicode字符集里就包括了英文字符和汉字,还有其他国家的语言字符。
python没有字符类型(char),只有字符串类型,单个字符也是字符串。
使用ord()内置函数可以获得一个字符的十进制Unicode码。
print(ord(a)) # 97
使用chr()内置函数可以将一个十进制Unicode码字符转换为字符。
print(chr(28100)) # 淄
分别是:单引号,"双引号",单三引号,"""双三引号"""
s1 = 666 s2 = "666" s3 = 666 s4 = """666""" s5 = s6 = """ """
单三引号,"""双三引号"""支持多行。
被引号包起来的零个或多个字符就是字符串对象。
a = abc b = "efg" c = hij d = """klm""" for it in (a, b, c, d): print(it, 类型是, type(it)) # abc 类型是 <class str> # efg 类型是 <class str> # hij 类型是 <class str> # klm 类型是 <class str>
另外单三引号,"""双三引号"""里面的字符可以跨行写。
str = """ 1ws sfg """ print(str) # # # 1ws # sfg
当我们想要保存单引号,"双引号"字符时,把他们写在单三引号,"""双三引号"""里面即可。
python支持空字符串,引号里啥也不写就是空字符。
s1 = "我爱你",我也是 s2 = print(s1) print(:, s2, 1) # 空字符串打印出一个空格 # # "我爱你",我也是 # # : 1
len()用于计算序列对象的长度。当对字符串使用时,能够得到字符串里面一共有多少个字符。
str1 = huhfedncjcne print(len(str1)) # 12
行连接符为反斜杠,当一行代码太长必须换行写的时候,可以在一行的最后面加上,解释器就认为要与下一行连起来。
a = abc b = "efg" c = hij d = """klm""" for it in (a, b, c, d): print(it, 类型是, type(it)) # abc 类型是 <class str> # efg 类型是 <class str> # hij 类型是 <class str> # klm 类型是 <class str>
有很多字符不能在屏幕上显示,但是有特殊的功能。在键盘上,26个字母a-z和数字0-10我们都认识,其他的按键都作为功能或者控制来辅助使用。有些字符不仅不容易在键盘上按出来,我们也比较陌生,这个时候可以使用转义字符。
转义字符以反斜杠开头,后接要转义的字符。
代表字符,"代表字符",\代表字符, 代表换行, 代表回车(回车就是回到行首,键盘上的enter键是换行的功能,虽然他叫回车键), 代表tab(打出四个空格),代表backspace(删掉光标处的字符)。
str1 = a,,",\, ,b print(str1) # a,,",, , # 6
用‘+’实现多个字符拼接起来。会生成新的对象,效率低。
用‘*’实现字符串的复制。会生成新的对象,效率低。
str1 = 我 str2 = 爱 str3 = 你 print(str1+str2+str3) print(str1*3) # 我爱你 # 我我我
每次调用print()函数后默认会换行。原因是print函数有个end默认参数,默认为end= ,所以会换行。我们可以修改end参数,让他不换行。
str1 = python print(str1, end=666) # python666
input函数可以接受用户输入的多个字符,以enter键结束输入,并且返回一个字符串。
name = input("请输入名字:") print("名字是:", name)
replace方法可以将一个字符串中的字符进行替换,这个操作会生成新的对象,并不会改变原来的字符串。
name = 123456 print(name.replace(1234, 4321)) # 432156
字符串转整型必须要求是纯整数字符串,也就是一个整数套上了引号,才能转,如:123。
字符串转浮点型,要求是一个数字套上引号才行。如:123,6.6。
print(int(666), float(666), float(6.66)) # 666 666.0 6.66 print((int(6.6))) # 报错,ValueError: invalid literal for int() with base 10: 6.6
字符串本质上是字符序列,且是有序序列,支持切片,也就是支持[]语法的操作,一种是用[]和索引来访问元素,另一种是用[]来实现切片。
str1 = 123456我爱你 print(str1[-3], str1[-2], str1[-1]) print(str1[-3:]) # 我 爱 你 # 我爱你
split:分割,将字符串分成多个字符串。需要依据给的条件分割,比如一个字符串中含有很多空格,那么可以以空格来分割这个字符串。分割完成之后将多个子字符串存在列表里返回。
join:合并,将多个字符串(这些子字符串放在可迭代序列里)合并成一个字符串。
str1 = 我 爱 你 str2 = 爱 str3 = 你 re1 = str1.split(sep= ) re2 = .join((str2, str3)) re3 = +.join([str2, str3]) # 字符之间用+号来连接 print(re1) print(re2) print(re3) # [我, 爱, 你] # 爱你 # 爱+你
字符串拼接推荐使用join方法,因为他不会创建新的字符串对象。
操作字符串和我们平常在word上写文章和在学校修改作文差不多,都是对句子(也就是字符串)进行操作,常见的操作有:删掉几个字;删掉开头;删掉句尾;改错字别字;将一句话加个逗号分成两句话;数一数作文字数够没够等等。计算机经常操作的字符串虽然包含生活中的字符串,但更多的是处理与计算机有关的字符串,比如文件名,路径,网站名称,h5文档。
len(str obj):获取字符串长度
str.count():指定字符串出现了几次
str.rstrip():去掉字符串尾巴的指定字符,可以用来获取文件名。
str.upper():将字符串变成全部大写
str.lower():将字符串变成全部小写
格式化就是将字符串变成我们想要的格式,比如一个小数要保留几位小数。
占位符:就像有人给你占了个座位一样,也许椅子上只是放了一本书,但是可以给你坐,也可以给你的好友坐。python格式化字符串常见的占位符有:{}和%,他们只是在字符串中占据某个位置,这些位置可以被其他对象替代。
format方法是字符串对象的一个方法。可以接收参数然后对字符串中的占位符进行替代,默认使用{}占位符。
str1 = 我是{},我爱{},非常的爱{} str2 = 我是{0},我爱{1},非常的爱{1}.format(老六, 马内) str3 = 我是{name},我爱{girl},非常的爱{money}.format(money=money, name=老六, girl=beautiful girl) print(str1.format(老六, python, 马内)) print(str2) print(str3) # 我是老六,我爱python,非常的爱马内 # 我是老六,我爱马内,非常的爱马内 # 我是老六,我爱beautiful girl,非常的爱money
由上面的代码可知:{}里要么啥也不写,要么只能写0-9之间的数字和参数变量名。
{}里面啥也不写,然后有几个{}就给几个参数。如上面代码中的str1。
{}里写了0-9之间的数字,每个数字代表占一个位置,相同的数字会替换成相同的值。format括号里从左往右的第1个参数对应为数字0,第2个参数对应为数字1,第3个参数对应为数字2,以此类推。如上面代码中的str2。
{}里写参数名时,format口号里得用关键字参数进行赋值,这时与顺序无关。如上面代码中的str3。
占位数据的填充与对齐:
在{}里加上:,再在冒号后面补充格式,也就是{:格式}。格式一般为:填充的字符+对齐方式+宽度。如{:#^8}表示用“#”来填充,^表示居中对齐,8表示占8个英文字符的宽度。
str1 = 数字是{:#>8} print(str1.format(100)) # 数字是#####100
另外,小于号<和大于号>分别表示左对齐和右对齐。
数字的格式化:
数字分为小数和整数,分别用字母f和d来表示。
小数的格式一般为:m.nf。如{:.2f}表示保留两位小数。{:.0f}表示不带小数。{:+.2f}表带正负号输出。{:4d}表示占4个字符宽度的整数。{:,}表示每隔三位数用逗号隔开。{:.2%}表示保留两位小数的百分数。{:.2e}表示保留两位小数的e记法。
str1 = 数字是{:#>8.2f} print(str1.format(100)) # 数字是#####100.00
str1 = {:@>6d},{:.6%},{:.2e},{:,},{:.0f} print(str1.format(100, 1, 100, 1000, 100.00)) # @@@100,100.000000%,1.00e+02,1,000,100
实际上,符号.表示的是精度,完整的是m.n,表最小宽度为m,小数位数为n。然后再m.n后面加上d,f,e,%等修饰符,以代表某种格式。
用%+类型来占一个位置,所占据的位置被替换后会按照类型来输出。
如%d表示整数,%s表示字符串,%f表示浮点数,%c表示单个字符,%e表示科学计数法,%o表示以8进制输出,%x表示以16进制输出。
语法如下:
str1 = 我要打印:%-8d,%s,%.2e,%o,%x,%.2f print(str1 % (100, 10086, 100, 100, 100, 100)) # 我要打印:100 ,10086,1.00e+02,144,64,100.00
其中第二行的%表示分隔符,是语法规定的。%后面紧跟参数,一个萝卜一个坑,从左往右依次对应。在%占位符情况下,没有^,<,>的对齐符号了,只有‘-’这一个对齐符号,他表示左对齐。
如果硬要对字符串进行修改而不生成新的字符串对象,可以将不可变字符串(默认的)转换为可变字符串。可以使用io模块的StringIO方法将不可变字符串转换为可变字符对象。
import io s = "hello, world" sio = io.StringIO(s) print(type(sio), and, id(sio), and, sio.getvalue()) sio.seek(7) sio.write(earth) print(type(sio), and, id(sio), and, sio.getvalue()) # <class _io.StringIO> and 1925805928664 and hello, world # <class _io.StringIO> and 1925805928664 and hello, earth
可以看到修改后字符串和原来字符串的id一模一样。
str1 = {:@>6d},{:.6%},{:.2e},{:,},{:.0f} print(str1.format(100, 1, 100, 1000, 100.00)) # @@@100,100.000000%,1.00e+02,1,000,100 实际上,符号.表示的是精度,完整的是m.n,表最小宽度为m,小数位数为n。然后再m.n后面加上d,f,e,%等修饰符,以代表某种格式。 2,%占位符格式化 用%+类型来占一个位置,所占据的位置被替换后会按照类型来输出。 如%d表示整数,%s表示字符串,%f表示浮点数,%c表示单个字符,%e表示科学计数法,%o表示以8进制输出,%x表示以16进制输出。 语法如下: str1 = 我要打印:%-8d,%s,%.2e,%o,%x,%.2f print(str1 % (100, 10086, 100, 100, 100, 100)) # 我要打印:100 ,10086,1.00e+02,144,64,100.00 其中第二行的%表示分隔符,是语法规定的。%后面紧跟参数,一个萝卜一个坑,从左往右依次对应。在%占位符情况下,没有^,<,>的对齐符号了,只有‘-’这一个对齐符号,他表示左对齐。 15,可变字符串 如果硬要对字符串进行修改而不生成新的字符串对象,可以将不可变字符串(默认的)转换为可变字符串。可以使用io模块的StringIO方法将不可变字符串转换为可变字符对象。 import io s = "hello, world" sio = io.StringIO(s) print(type(sio), and, id(sio), and, sio.getvalue()) sio.seek(7) sio.write(earth) print(type(sio), and, id(sio), and, sio.getvalue()) # and 1925805928664 and hello, world # and 1925805928664 and hello, earth 可以看到修改后字符串和原来字符串的id一模一样。