Python3学习笔记06-字符串
可以使用引号('或")来创建字符串。
var1 = 'Hello World!' var2 = "Runoob"
在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:
print('包含中文的str') print('\u4e2d\u6587')#如果知道字符的整数编码,还可以用十六进制这么写str
如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes
Python对bytes类型的数据用带b前缀的单引号或双引号表示
x = b'abc' print(x)
以Unicode表示的str通过encode()方法可以编码为指定的bytes
a = 'abc'.encode('ascii') b = '中文'.encode('utf-8') print('a = ',a,'b = ',b)#纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes
从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:
c = b'abc'.decode('ascii') d = b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') print('c = ',c,'d = ',d) b'\xe4\xb8\xad\xff'.decode('utf-8')#如果bytes中包含无法解码的字节,decode()方法会报错
e = b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') print(e)
传入errors='ignore'忽视无法解码的字节
要计算str包含多少个字符,可以用len()函数
print(len('abc')) print((len('中文')))
len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数
print(len(b'abc')) print(len(b'\xe4\xb8\xad\xe6\x96\x87'))
可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节
Python 访问子字符串,可以使用方括号来截取字符串,如下实例
str = 'Runoob' print(str[0:-1]) # 输出第一个到倒数第二个的所有字符 print(str[0]) # 输出字符串第一个字符 print(str[2:5]) # 输出从第三个开始到第五个的字符 print(str[2:]) # 输出从第三个开始的后的所有字符
更新字符串
可以截取字符串的一部分并与其他字段拼接
a = var1[:6] + 'Runoob!' print ("已更新字符串 : ", a)
转义字符
print("abc")#''或""本身只是一种表示方式,不是字符串的一部分 print("i""'m ok")#如果'本身也是一个字符,那就可以用""括起来 print('i\'m "ok"')#如果字符串内部既包含'又包含",可以用转义字符\来标识 #转义字符\可以转义很多字符 print('i \nm')#\n表示换行 print('a\tb')#\t表示制表符 print('a\\\n\\b')#字符\本身也要转义,所以\\表示的字符就是\ print(r'a\\\n\\b')#用r''表示''中的字符串不需要转义
字符串运算符
a = 'Hello' b = 'python' print(a+b)#字符串连接 print(a*2)#重复输出字符串 print(a[1])#通过索引获取字符串中字符 print(a[1:3])#截取字符串中的一部分 print('H'in a)#如果字符串中包含给定的字符返回 True print('b' not in a )#如果字符串中不包含给定的字符返回 True print(r'a\\\n\\b')#用r''表示''中的字符串不需要转义 r大小写都可以
字符串格式化
print('Hello %s'%'word')# %s表示用字符串替换 print('Hi,%s,you have %d'%('xu',100000))# %d表示用整数替换 #有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略 print('%f'%3.12)# %f表示用浮点数替换 print('%x'%0xaa3) # %x表示用十六进制整数替换 #其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数: print('%5d-%03d' % (11,10))# %后是0 表示在整数的前面补0 之后到d的数字表示这个整数是多少位的 print('%.3f' % 3.1415926)#f前的数字表示留几位小数 # %s永远起作用,它会把任何数据类型转换为字符串 print('Age:%s Gender:%s'%(25,True)) #如果%是个普通字符,需要用%%来表示一个% print('growth rate:%d%%'%7)
三引号
para_str = """这是一个多行字符串的实例 多行字符串可以使用制表符 TAB ( \t )。 也可以使用换行符 [ \n ]。 """ print (para_str) print(r'''hello,\n world''')#多行字符串'''...'''还可以在前面加上r使用
字符串内建函数
capitalize()将字符串的第一个字符转换为大写
练习 通过切片去除字符串的空格
def trim(s): n = len(s) while 0 < n: if s[:1] == ' ': s = s[1:] elif s[-1:] == ' ': s = s[:-1] n=n-1 return s if trim('hello ') != 'hello': print('测试失败!') elif trim(' hello') != 'hello': print('测试失败!') elif trim(' hello ') != 'hello': print('测试失败!') elif trim(' hello world ') != 'hello world': print('测试失败!') elif trim('') != '': print('测试失败!') elif trim(' ') != '': print('测试失败!') else: print('测试成功!')