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)还原成字符串

posted @ 2021-07-02 20:58  索匣  阅读(258)  评论(1编辑  收藏  举报