1、字符串定义:单引号、双引号、三引号引用的对象 2、换行问题:单引号和双引号不可以直接换行,要在需换行处加\n; 3、不同引号个数的区别: 外双内单,外单内双 三引号也可以表示注释,或大段文字(方便换行,打印出来的也有空格和换行,如果文中有单双引,可以用三引) 4、字符串的元素 5、字符串不可变,有序
1.1.1 转义字符
字符串中有特殊意义或者特殊功能的符号,一般在特定符号前加\表示,如\0,\t,\n等,就称为转义字符
1.1.1.1 常用转义符
转义符 | 名称 | 意义 |
---|---|---|
\n | 换行符 | 相当于按回车 |
\t | 水平制表符 | 相当于按一次Tab键 |
\' | 表示一个普通的单引号 | |
\b | backspace键 | 删除一个字符 |
1.1.1.2 举例
str1 = 'It's OK' # invalid syntax,外双内单
str1 = 'abcde\b' # backspace键
print(str1)
abcd
str1 = 'abcde\nfghij' # 换行
print(str1)
abcde
fghij
1.1.1.3 去除转义的三种方法
filepath = 'D:\note1.txt'
print(filepath)
D:
ote1.txt
方案一 \n前面再加一个\
filepath = 'D:\\note1.txt'
方案二 字符串外面加一个r,表示后面的字符串的所有转义符均不生效
filepath = r'D:\note1.txt'
方案三 表示路径时,可以用/代替\,linux也可以
filepath = 'D:/note1.txt'
1.1.2 字符串编码
1.1.3 字符串操作
1.1.3.1 拼接(加法’+‘)
str1 + str2 将两个字符串合并成一个字符串
print('a' + 1) # str 与int 不能相加或拼接,str()将对象转为str型,int()将对象转为int型
‘字符串’+‘字符串’
‘字符串’+数字
报错
‘字符串’*2
打印两遍
1.1.3.2 乘法
1.1.3.2 下标 索引
-
str[0]到str[n-1]
-
str[-1]到str[-n]
-
越界会报错
-
字符串是不可变对象,不可以修改某一位的值
-
str[3]='d'
-
报错
-
-
# 字符串的下标 # 下标从0开始,长度为n的字符串,最大下标是n-1 # 也可以使用负下标,最后一位下标是-1 str3 = 'abcdefg' print(str3[2]) print(str3[-5]) str3[0] = 'q' # 字符串是不可变对象, # 下标越界string index out of range str6 = '' print(str6[0])
1.1.3.3 切片
# 字符串切片[起始值:终止值] 左含右不含 print(str3[0:3]) print(str3[:3]) # 表示从头开始 print(str3[:]) # 表示完整赋值 str3_new = str3[:] print(id(str3_new), id(str3)) # 字符串是同个对象,列表是两个对象 # 字符串的切片生成的是新的对象,全取除外,字符串的切片不影响原对象,原对象不变 # edc print(str3[4:1:-1]) # 步长为负数代表从右向左取值,所以起始值大于终止值才能取到值、 print(str3[-3:-6:-1])
-
起始值永远小于终止值
-
str[0:2]
-
左含右不含
-
切片生成的是新的对象,不影响原对象
-
-
str[-4:-1]
-
负数,从小到大,起始值大于终止值,因为是从右向左取值
-
str[-1:-4] 报错
-
-
不写,则表示全取
-
print(str[4:])
-
-
步长
-
str[起:终:步],步长默认为1
-
为-1时,从右向左
-
str='abcde',取cba,str[2::-1]或[-3::-1],c是起始值
-
str[6:4:-1]或str[-1:-3:-1]
-
-
大于n时,只显示第一个值
-
起始值与终止值的正负不影响方向,步长的正负影响方向,步长为负数时,从右向左取值
目录
-
1.1.5 字符串常用方法
方法 | |||
---|---|---|---|
find | print(str1.find('c')) # 返回参数在对象中的位置 print(str1.find('g')) # 找不到时返回-1,在最后一位找到的返回正下标,不会返回-1 | ||
strip() | |||
replace() | |||
startswith() | |||
endswith() | |||
split() | |||
案例:
str1 = 'abc' str1.isdigit() # 判断对象是否是纯数字,返回值是布尔型 str1.isalpha() # 判断对象是否是纯字母,返回值是布尔型 # find print(str1.find('c')) # 返回参数在对象中的位置 print(str1.find('g')) # 找不到时返回-1,在最后一位找到的返回正下标,不会返回-1 str2 = 'abcdefabcdefabcdef' print(str2.find('c', 3)) # 也可以指定从第几位开始查找 print(str2.index('c', 3)) # index()用法与find()类似,找不到值抛异常 # strip() # 去掉字符串前后的空格,或其他指定字符,不去字符串内部之间的空格 str3 = ' ****** 烟 花 三 月下 扬 州 ' str3_new = str3.strip() print(str3_new) str6 = str3.strip('*') print(str6) # replace() 替换字符 replace(参数1,参数2) 参数1 需要替换的字符 参数2 替换后的字符 str9 = ' 烟 花 三 月 下 扬 州 ' print(str9.replace(' ', '')) str10 = '''<p>dddddufydiaufhahfurehguierhg</p> <p>dsopfjeibnejioavsdkjcnf</p>''' str10_new = str10.replace('<p>', '').replace('</p>', '') # 返回值仍是str,仍可以用replace,isdigit()返回bool,find()返回数字不能这么用 print(str10_new) # startswith() 判断字符串是否以某个或某些字符开头 # 判断一个身份证是否是南京的身份证 id_card = '320304199908187969' if id_card.startswith('3201'): print('南京的身份证') # endswith() 判断字符串是否以某个或某些字符结尾,返回值是布尔型 if True: # '',none,0为FALSE,其他为真 print(12345) # split() # 切割字符串,他有一个参数,作为分隔符,返回值是列表 str11 = 'adskajgakjg' print(str11.split('d')) # ['abc','efg'] str12 = 'cdecdec' print(str12.split('c')) # 如果切割符位于首位或末位,会产生空值 # ['', 'de', 'de', '']
1.1.6 格式化字符串
1.1.6.1 法一
1.1.6.2 法二
1.1.6.3 法三
a = 10 b = 8 print(str(a) + '+' + str(b) + '=' + str(a + b)) # 10+8 = 18 print('%s+%s=%s' % (a, b, a + b)) # 格式化字符串 # 格式化字符串 print(f'{a}+{b} = {a+b}') # 方案一 %s字符串或数字均可,%d整数 %f浮点数 info1 = '我是%s,你是%s,他是%s,今年是%d年' % ('德华', '学友', '黎明', 2022) # 前面用%d,后面用字符串,报错 # 前面用%s,后面用数字,不报错 # 前面的空位比后面的值多,报错 # 前面的空位比后面的值少,报错 # 补齐到指定位数,默认右对齐,左对齐加-号 # info1 = '我是%10s,今年是%10d年' % ('德华', 2022) # 打印后是 我是 德华,今年是 2022年。 # info1 = '我是%-10s,今年是%-10d年' % ('德华', 2022) # 打印后是 我是德华 ,今年是2022年 。 # 补0 # info1 = '我是%010s,今年是%010d年' % ('德华', 2022) # 打印后是 我是 德华,今年是0000002022年。 # info1 = '我是%010s,今年是%-010d年' % ('德华', 2022) # 打印后是 我是 德华,今年是2022 年。 # 补零,只补数字,<右侧补零,> 或不写是左侧补零 str1 = 'My name is {:10},your name is {:10},age is {:<010}.'.format('Clark', 'ralf', 21) print(str1) # %f 浮点型,默认保留六位小数, number1 = '您输入的数字是%f' % (3.6) print(number1) # 3.600000 # 保留2位小数, number1 = '您输入的数字是%.2f' % (3.6) # 补齐到10位,保留两位小数 # number1 = '您输入的数字是%10.2f' % (3.6) print(number1) # 方案二 format str1 = 'My name is {},your name is {},age is {}.'.format('Clark', 'ralf', 21) print(str1) # 补齐{:n} # 字符串默认是左对齐,数字是右对齐,n是下限 str1 = 'My name is {:10},your name is {:10},age is {:10}.'.format('Clark', 'ralf', 21) print(str1) # My name is Clark ,your name is ralf ,age is 21. # 修改对齐方式,{:<n}左对齐 {:>n}右对齐,{:^n}居中对齐 str1 = 'My name is {:>10},your name is {:^10},age is {:<10}.'.format('Clark', 'ralf', 21) print(str1) # 方案三f a1 = 'Clark' a2 = 'ralf' a3 = 21 # str1 = f'My name is {a1},your name is {a2},age is {a3}.' # str8 = f'My name is {a1:>10},your name is {a2:10},age is {a3:<10}.' print(str1) # 前面的空位比后面多,报错 # 前面的空位比后面少,不报错 ''' 顺序取值法和下标取值法 ''' # 下标取值法(下标) str1 = 'My name is {1:10}, your name is {2:10},age is {0:10}.'.format('Clark','Ralf',18) str2= 'My name is {1}, your name is {2},age is {0}.'.format('Clark','Ralf',18) print(str1) # 顺序取值法 str1 = 'My name is {:10}, your name is {:10},age is {:10}.'.format('Clark','Ralf',18) # 顺序取值法和下标取值法不能混用,否则报错 str3 = 'My name is {0}, your name is {2},age is {}.'.format('Clark','Ralf',18) # 前面空位比后面多 # str4 = 'My name is {}, your name is {},age is {}.'.format('Clark','Ralf') str5 = 'My name is {1}, your name is {1},age is {0}.'.format('Clark','Ralf') # 前面空位比后面少,不报错 str6 = 'My name is {1}, your name is {1}.'.format('Clark','Ralf',18)