python的5大数据类型操作及比较之字符串篇
1、去空格及特殊符号
strip: 用来去除头尾字符、空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格)
lstrip:用来去除开头字符、空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格)
rstrip:用来去除结尾字符、空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格)
从字面可以看出r=right,l=left,strip、rstrip、lstrip是开发中常用的字符串格式化的方法。
注意:这些函数都只会删除头和尾的字符,中间的不会删除。
str_url = 'zjia/sdf1'
# 1、去空格及特殊符号
# strip返回移除字符串头尾指定的字符生成的新字符串。
# 这个和split容易弄混
a = str_url.strip('1') # zjia/sdf
b = str_url.lstrip('zj') # ia/sdf1
c = str_url.rstrip('df1') # zjia/s
2、复制字符串:直接复制给另一变量
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print (sStr2,sStr1) # strcpy strcpy2
3、连接字符串:+
sStr1 = 'strcat'
sStr2 = 'append'
sStr1 += sStr2
print(sStr1) # strcatappend
4、查找字符:index
sStr1 = 'strchr'
sStr2 = 's'
nPos = sStr1.index(sStr2)
print (nPos) # 0
5、比较字符串
需要导入模块operator
并且调用eq方法
import operator as op
sStr1 = 'strchr'
sStr2 = 'strch'
print(op.eq(sStr1,sStr2)) # False
6、扫描字符串是否包含指定的字符:len('str1_naem'and'str2_name')
只可以得出两字符串中最短的长度
#strspn(sStr1,sStr2)
sStr1 = '12345678'
sStr2 = '456'
#sStr1 and chars both in sStr1 and sStr2
print(len(sStr1 and sStr2)) # 3
7、字符串长度:使用len方法
sStr1 = 'strlen'
print(len(sStr1)) # 6
8、将字符串中的大小写转换
S.lower() #小写
S.upper() #大写
S.swapcase() #大小写互换
S.capitalize() #首字母大写
String.capwords(S) #这是模块中的方法。它把S用split()函数分开,然后用capitalize()# 把首字母变成大写,最后用join()合并到一起
9、追加指定长度的字符串
sStr1 = '12345'
sStr2 = 'abcdef'
n = 3
sStr1 += sStr2[0:n]
print(sStr1) # 12345abc
10、字符串指定长度比较
import operator as op
sStr1 = '12345'
sStr2 = '123bc'
n = 3
print(op.eq(sStr1[0:n],sStr2[0:n]))
11、复制指定长度的字符
sStr1 = ''
sStr2 = '12345'
n = 3
sStr1 = sStr2[0:n]
print(sStr1) #123
12、将字符串前n个字符替换为指定的字符
sStr1 = '12345'
ch = 'r'
n = 3
sStr1 = n * ch + sStr1[3:]
print(sStr1) # rrr45
13、扫描字符串
sStr1 = 'cekjgdklab'
sStr2 = 'gka'
nPos = -1
for c in sStr1:
if c in sStr2:
nPos = sStr1.index(c)
break
print(nPos) # 2
14、翻转字符串
sStr1 = 'abcdefg'
sStr1 = sStr1[::-1]
print(sStr1
15、查找字符串
sStr1 = 'abcdefg'
sStr2 = 'cde'
print(sStr1.find(sStr2)) # 2
16、分割字符串:split
sStr1 = 'ab,cde,fgh,ijk'
sStr2 = ','
sStr1 = sStr1[sStr1.find(sStr2) + 1:]
print(sStr1) # cde,fgh,ijk
#或者
s = 'ab,cde,fgh,ijk'
print(s.split(',')) # ['ab', 'cde', 'fgh', 'ijk']
17、连接字符串:要想转化为实际的类型需要赋值给一个对象
delimiter = ','
mylist = ['Brazil', 'Russia', 'India', 'China']
print(delimiter.join(mylist)) # Brazil,Russia,India,China
b = delimiter.join(mylist)
print(b) # Brazil,Russia,India,China
18、PHP 中 addslashes 的实现
def addslashes(s):
d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}
return ''.join(d.get(c, c) for c in s)
s = "John 'Johny' Doe (a.k.a. \"Super Joe\")\\\0"
print(s) # John 'Johny' Doe (a.k.a. "Super Joe")\
print(addslashes(s)) # John \'Johny\' Doe (a.k.a. \"Super Joe\")\\\
19、只显示字母与数字
def OnlyCharNum(s,oth=''):
s2 = s.lower()
fomart = 'abcdefghijklmnopqrstuvwxyz0123456789'
for c in s2:
if not c in fomart:
s = s.replace(c,'')
return s
print(OnlyCharNum("a000 aa-b")) # OnlyCharNum
20、截取字符串
字符串不是列表,元素不需要用,分开来确认索引是多少
逆序截取,第一位不选取,最后一位默认他的方向,也默认了第一位的位置
str = '0123456789' # 不是列表,元素不需要用,分开来确认索引是多少
# 012
print(str[0:3]) #截取第一位到第三位的字符
# 0123456789
print (str[:] )#截取字符串的全部字符
# 6789
print (str[6:]) #截取第七个字符到结尾
# 0123456
print (str[:-3]) #截取从头开始到倒数第三个字符之前
# 2
print (str[2]) #截取第三个字符
# 9
print (str[-1]) #截取倒数第一个字符
# 9876543210
print (str[::-1]) #创造一个与原字符串顺序相反的字符串
# 78
print (str[-3:-1]) #截取倒数第三位与倒数第一位之前的字符
# 789
print (str[-3:]) #截取倒数第三位到结尾
# 96
print (str[:-6:-3]) #逆序截取,第一位不选取,最后一位默认他的方向,也默认了第一位的位置
21、字符串在输出时的对齐
print("|","Ursula".ljust(20),"|") #左对齐
print("|","Ursula".center(20),"|") #居中对齐
print("|","Ursula".rjust(20),"|") #右对齐
# #运行结果
# | Ursula |
# | Ursula |
# | Ursula |
# 通过format()函数格式化实现左对齐、居中、右对齐
print("|",format("Ursula","*>20"),"|") #左对齐
print("|",format("Ursula","*^20"),"|") #居中对齐
print("|",format("Ursula","*<20"),"|") #右对齐
22、字符串中的搜索和替换
str = '3482'
S = '123 456789' # find index rfind rindex count replace strip lstrip expandtabs
S.find(str, beg=0, end=len(S))
#返回S中出现str的第一个字母的标号,如果S中没有str则返回-1。start和end作用就相当于在S[start:end]中搜索
S.index(str, beg=0, end=len(S))
#与find()相同,只是在S中没有str时,会返回一个运行时错误
S.rfind(str, beg=0, end=len(S))
#返回S中最后出现的str的第一个字母的标号,如果S中没有str则返回-1,也就是说从右边算起的第一次出现的str的首字母标号
S.rindex(str, beg=0, end=len(S))
S.count(str, beg=0, end=len(S)) #计算str在S中出现的次数
S.replace('1','i', 2) # old, new[, max]
#把S中的old替换为new,max为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
S.strip('19')
#把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
S.lstrip('1')
S.rstrip('9')
S.expandtabs(3) # str.expandtabs(tabsize=8)
#把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个
23、字符串的分割和组合
S = '123 45678 9'
seq = 'zz'
print(S.split(' ',1))
# ['123', ' 45678 9']
#以空格为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
print(S.rsplit(' ', 1))
# ['123 45678 ', '9']
print(S.splitlines(True))
#['123 45678 9']
# splitlines()方法按照行('\r', '\r\n', \n')分隔字符串,
# 返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
#把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
print(S.join(seq)) #把seq代表的序列──字符串序列,用S连接起来
# z123 45678 9z # join是迭代的方法,这个方法,将可迭代的数据类型转为字符串或者bytes
# join迭代的方法注意这个可迭代的数据中的元素必须是相同类型的。
24、字符串的mapping,创建字符映射的转换表
# 使用maketrans() 方法将所有元音字母转换为指定的数字:
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
# intab -- 字符串中要替代的字符组成的字符串。
# outtab -- 相应的映射字符的字符串。
str = "this is string example....wow!!!"
print (str.translate(trantab)) # th3s 3s str3ng 2x1mpl2....w4w!!!
25、字符串还有一对编码和解码的函数
# 编码和解码
# 编码str.encode(encoding='UTF-8',errors='strict')
str = "this is string example....wow!!!"
b = str.encode('gbk','strict')
print( b) # b'this is string example....wow!!!'
# 其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为"strict",意思是UnicodeError。可能的值还有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白
# 解码
c = b.decode('utf-8','strict')
print(c) # this is string example....wow!!!
26、字符串的测试、判断函数,这一类函数在string模块中没有,这些函数返回的都是bool值
S代表某字符串
S.isalnum() 所有字符都是数字或字母,为真返回Ture,否则返回False
S.isalha() 所有字符都是字母,为真返回Ture,否则返回False
S.isdigit() 所有字符都是数字,为真返回Ture,否则返回False
S.islower() 所有字符都是小写,为真返回Ture,否则返回False
S.isupper() 所有字符都是大写,为真返回Ture,否则返回False
S.istitle() 所有单词都是首字母大写,为真返回Ture,否则返回False
S.isspace() 所有字符都是空白字符,为真返回Ture,否则返回False
使用int() 可以将小数转化为整数,结果是向下取整。
使用int()按照四舍五入方式取整:
1、四舍五入的结果为5: int(5.4+0.5)==5
2、四舍五入的结果为6:int(5.6+0.5)==6
27、python3中各种类型转换函数
int (x [,base]) 将 x 转换为一个整数
long (x [,base]) 将 x 转换为一个长整数
float (x) 将 x 转换到一个浮点数
complex (real [,imag]) 创建一个复数
str (x) 将对象 x 转换为字符串
repr (x) 将对象 x 转换为表达式字符串
eval (str) 用来计算在字符串中的有效 Python 表达式,并返回一个对象
tuple (s) 将序列 s 转换为一个元组
list (s) 将序列 s 转换为一个列表
chr (x) 将一个整数转换为一个字符
unichr (x) 将一个整数转换为 Unicode 字符 (python3中剔除)
ord (x) 将一个字符转换为它的整数值
hex (x) 将一个整数转换为一个十六进制字符串
oct (x) 将一个整数转换为一个八进制字符串
字符串对象是不可改变的,也就是说在python创建一个字符串后,你不能把这个字符中的某一部分改变。任何上面的函数改变了字符串后,都会返回一个新的字符串,原字串并没有变。其实这也是有变通的办法的,可以用S=list(S)这个函数把S变为由单个字符为成员的list,这样的话就可以使用S[3]='a'的方式改变值,然后再使用S=" ".join(S)还原成字符串