python字符串的操作

python实操

字符串的操作。字符串的操作是python中非常重要的的一环。
在很多情况下数据处理无非两类:

  1. 文本内容的离散数据
  2. 数据表之类的关联数据

所以字符串处理可谓占据了半壁江山。十分重要!!!
所以让我们来看看具体的操作吧。


1,str的声明

str(object, encoding=encoding, errors=errors)
默认是utf-8编码。

 a = "hello world"

与cpp等不一样的是python字符串末尾没有一个\0.
所以无序每次都小心长度问题。


2,str的类型转换

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__()内置方法就可以。
具体的显示也是这个方法的返回值,你可以修改,让结果更加人性化!!!

2,字符串的索引(截取)

要使用一个字符串,或者说最常用的使用子字符串。我们需要截取。

# 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开始,左闭右开
这是必须掌握的。其实这个截取格式在以后的数据表形的数据里也经常用到。


3,内置的算法

3.1 常见的清洗操作

# 默认空字符,不只是空格,所以常用来清除末尾的换行
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

3.2 if中常用的字符串运算

# 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。
'''

3.3格式相关的操作

# 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 


4,子字符串的操作

子字符串往往是我们的目标信息。
除了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范围内出现的次数


总结

字符串操作是文本处理的核心,无论你的业务是什么,总得来说都需要
读入文本-》处理文本-》保存文本。
而字符串的相关操作是处理文本的核心

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

演技拉满的白马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值