字符串的操作。字符串的操作是python中非常重要的的一环。
在很多情况下数据处理无非两类:
所以字符串处理可谓占据了半壁江山。十分重要!!!
所以让我们来看看具体的操作吧。
str(object, encoding=encoding, errors=errors)
默认是utf-8编码。
a = "hello world"
与cpp等不一样的是python字符串末尾没有一个\0.
所以无序每次都小心长度问题。
x = str(3.14)
x = int("15")
# 以下了解即可,也就是说不同进制的数本质上是字符串表达形式不同
print(bin(100)) # 将十进制的100转换成二进制 0b1100100
print(oct(100)) # 将十进制的100转换成八进制 0o144
print(hex(100)) # 将十进制的100转换成十六进制 0x64
# 0b开头为二进制数 0o开头为八进制数 0x开头为十六进制数
print(int('0b1100100', 2)) # 100
print(int('0o144', 8)) # 100
print(int('0x64', 16)) # 100
顺带提一句,最常用的肯定是数字和字符串的转换。
print(str(123))
print(str(123.21))
print(str([1, 2, 3, 4]))
print(str({'name': 'jason', 'pwd': 123}))
print(str((1, 2, 3, 4)))
print(str(True))
print(str({1, 2, 3, 4}))
其实只要转换的数据类型含有__str__()内置方法就可以。
具体的显示也是这个方法的返回值,你可以修改,让结果更加人性化!!!
要使用一个字符串,或者说最常用的使用子字符串。我们需要截取。
# 1. 索引取值
res = 'hello world'
print(res[1]) # e
# 2.切片操作 顾头不顾尾
print(res[1:4]) # ell
# 3.步长操作
print(res[1:10:3]) # eood
# 4.反向索引
print(res[-1]) # d 最后一位
print(res[-5:-1]) # orld 顾头不顾尾
print(res[-5:-1:-1]) # 方向冲突 无输出
print(res[::-1]) # dlrow olleh 反向输出
注意是从0开始,左闭右开!
这是必须掌握的。其实这个截取格式在以后的数据表形的数据里也经常用到。
# 默认空字符,不只是空格,所以常用来清除末尾的换行
name = ' tony '
print(name.strip()) # tony
name1 = '$$tony$$$'
print(name1.strip('$')) # tony
# lstrip() 只移除左边 rstrip() 只移除右边的
print(name1.lstrip('$')) # tony$$$
print(name1.strip('$')) # $$tony
# 默认空格 返回的结果是一个列表
res2 = 'jason|123|18'
print(res2.split('|')) # ['jason', '123', '18']
print(res2.split('|', maxsplit=1)) # ['jason', '123|18'] maxsplit用于控制切割的次数 默认从左边开始切割
# rsplit 从右边开始切割
print(res2.rsplit('|', maxsplit=1)) # ['jason|123', '18']
# upper() 和 lower()
res = 'my NAME IS tom'
print(res.upper()) # MY NAME IS TOM 将英文字符串全部转变为大写
print(res.lower()) # my name is tom 将英文字符串全部转变为小写
# isupper() 和 islower()
res1 = res.upper()
res2 = res.lower()
print(res1.isupper()) # True 判断是否是纯大写
print(res2.isupper()) # False
print(res1.islower()) # False 判断是否是纯小写
print(res2.islower()) # Tru
# length
len(res)
# 成员运算和列表类似
res = 'hello world'
print('hello' in res)
# startswith() 和 endswith()
res = 'my name is tom'
# startswith() 判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
print(res.startswith('m')) # True
print(res.startswith('my')) # True
# endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False
print(res.endswith('m')) # True
print(res.endswith('tom')) # True
# 判断字符串是否是纯数字组成,返回结果为True或False
str2 = '5201314'
print(str2.isdigit()) # True
str2 = '123g123'
print(str2.isdigit()) # False
#在python3中
num1 = b'4' #bytes
num2 = u'4' #unicode,python3中无需加u就是unicode
num3 = '四' #中文数字
num4 = 'Ⅳ' #罗马数字
#isdigt:bytes,unicode
>>> num1.isdigit()
True
>>> num2.isdigit()
True
>>> num3.isdigit()
False
>>> num4.isdigit()
False
#isdecimal:uncicode(bytes类型无isdecimal方法)
# 这是判断是不是都是十进制数组成的,不是判断是否小数的。
>>> num2.isdecimal()
True
>>> num3.isdecimal()
False
>>> num4.isdecimal()
False
#isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
>>> num2.isnumeric()
True
>>> num3.isnumeric()
True
>>> num4.isnumeric()
True
# 三者不能判断浮点数
>>> num5 = '4.3'
>>> num5.isdigit()
False
>>> num5.isdecimal()
False
>>> num5.isnumeric()
False
'''
总结:
最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
如果要判断中文数字或罗马数字,则需要用到isnumeric。
'''
# 2.center,ljust,rjust,zfill
name='tony'
name.center(30,'-') # 总宽度为30,字符串居中显示,不够用-填充
-------------tony-------------
name.ljust(30,'*') # 总宽度为30,字符串左对齐显示,不够用*填充
tony**************************
name.rjust(30,'*') # 总宽度为30,字符串右对齐显示,不够用*填充
**************************tony
name.zfill(50) # 总宽度为50,字符串右对齐显示,不够用0填充
0000000000000000000000000000000000000000000000tony
# 3.expandtabs
name = 'tony\thello' # \t表示制表符(tab键)
>>> name
tony hello
name.expandtabs(1) # 修改\t制表符代表的空格数
tony hello
# 4.captalize,swapcase,title
# 4.1 captalize:首字母大写
>>> message = 'hello everyone nice to meet you!'
>>> message.capitalize()
Hello everyone nice to meet you!
# 4.2 swapcase:大小写翻转
>>> message1 = 'Hi girl, I want make friends with you!'
>>> message1.swapcase()
hI GIRL, i WANT MAKE FRIENDS WITH YOU!
#4.3 title:每个单词的首字母大写
>>> msg = 'dear my friend i miss you very much'
>>> msg.title()
Dear My Friend I Miss You Very Much
子字符串往往是我们的目标信息。
除了startswith() 和 endswith(),之外还有常见的比如说,find,search之类以及终极大招正则表达式。
此外还有前端,爬虫方面的xpath,bs,都是为了定位子字符串!!!
这里只提供一下简单的方法。详细内容见正则表达式。
# find,rfind,index,rindex,count
msg='tony say hello'
# 返回的都是从0开始的位置
msg.find('o',1,3) # 在索引为1和2(顾头不顾尾)的字符中查找字符o的索引
msg.index('e',2,4)
msg = "hello everyone"
msg.count('e') # 统计字符串e出现的次数
msg.count('e',1,6) # 字符串e在索引1~5范围内出现的次数
字符串操作是文本处理的核心,无论你的业务是什么,总得来说都需要
读入文本-》处理文本-》保存文本。
而字符串的相关操作是处理文本的核心。