从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件

11、数据类型-字符串—str详解

发布:蔺要红04-09分类: Python

数据类型——字符串str使用方法
 
>>> "  123".isdecimal()           #判断字符串是否为数字
False
>>> "  123".strip().isdecimal()   #判断字符串是否为数字 123字符串中有空格,用strip去掉了空格
True

>>> '   Hello World  '.strip()     #默认删除开头和结尾的空格(用户输入过滤使用),如果是多行,空白行也会删除
'Hello World'
>>> "  lin%yaohong%".strip("%")    #删除%
'  lin%yaohong'
>>> "  *lin%yaohong%".strip("%*")  #删除% 注意:字符串里面的%和*不会删,因为前面有空格
'  *lin%yaohong'
>>> "  *lin%yaohong%".strip(" %*") #删除% * 注意:空格和%和*都会删除 (" %*")里包含三个元素
'lin%yaohong'
#strip、lstrip、rstrip   三个用法一个 一个只删头部、一个只删尾部、一个删开头加尾部

>>> "AbcdEfh".startswith('Ab')     #判断字符串是否以Ab开头
True
>>> "AbcdEfh".startswith('c',2,6)  #判断2-6个字符是否包含c #可以切片
True
>>> "AbcdEfh".startswith('h',-1)   #判断最以后一个是否为h #可以切片
True
>>> "Hello World".endswith("old")  #判断字符串是否以old结尾
False
>>> "Hello World".endswith("rld")  #判断字符串是否以old结尾 
True

>>> len('AbCdeFh')                 #len查看字符串的长度(字典,列表,等都有长度)
7
>>> 'AbCdE'.capitalize()           #把第一个字符串大写,其他小写
Abcde
>>> "AbCdE".upper()                #把字符串全部大写,对数字没影响(验证码常用)
ABCDE
>>> "AbCdE".lower()                #把字符串全部小写,对数字没影响 (验证码常用)
abcde
>>> "AbCdEfh".swapcase()           #大小写反转
aBcDeFH
>>> "lin yao hong".capitalize()    #只把字符串的一个字母大写
Lin yao hong
>>> "lin yao hong".title()         #把每个单词首字母大写
Lin Yao Hong
>>> "lin-yao1hong".title()         #把每个单词首字母大写(特殊字符或数字)
Lin-Yao1Hong
>>> 'Hello World'.find('o')        #查找o并返回索引
4
>>> 'Hello World'.find('a')        #查找a没有返回-1
-1
>>> 'Hello World'.find('o',0,5)    #从0-5查找并返回索引
4
>>> 'Hello World'.find('o',0,3))   #从0-5查找并返回索引,没有返回-1
-1
#find 从字符串中找出某个子字符串第一个匹配项的索引位置,
#该方法与 index() 方法一样,只不过如果子字符串不在字符串中不会报异常,而是返回-1
#index()找不到会报错
>>> 'AbC\tdE'.expandtabs()         #8位补全(做报表常用,对齐)
AbC     dE
>>> 'A\tdE'.expandtabs()           #8位补全\t代表前面为8-16个位置,不够用空格
A       dE
>>> 'AbC\tdE'.expandtabs(20)       #可以指定补全位数
AbC                 dE

 

isdigit   isnumeric  isdecimal


Python isdigit() 方法检测字符串是否只由数字组成

Python isnumeric() 方法检测字符串是否只由数字组成。这种方法是只针对unicode对象。
注:定义一个字符串为Unicode,只需要在字符串前添加 'u' 前缀即可

Python isdecimal() 方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。
注意:定义一个十进制字符串,只需要在字符串前添加 'u' 前缀即可

 
isdigit() 
方法检测字符串是否只由数字组成、和isnumeric 一样
如果字符串只包含数字则返回 True 否则返回 False。
#实例
>>> str = '2019'
>>> str.isdigit()
True
>>> str = '2019lin'
>>> str.isdigit()
False
#实例二、在if语句中用来判断用户的输入
[root@test01 ~/str]# cat str1.py
str = '2019'
if str.isdigit():
    print("这是数字")
else:
    print('这不是数字')
[root@test01 ~/str]# python str1.py
这是数字
# -*- coding:utf-8 -*-
v = '二'
vi = v.isdigit()
v2 = v.isdecimal()
v3 = v.isnumeric()
print(vi,v2,v3)
v = '①'
vi = v.isdigit()
v2 = v.isdecimal()
v3 = v.isnumeric()
print(vi,v2,v3)

#D:\python\python.exe F:/运维笔记/python/第二章/123444.py
False False True
True False True

center   rjust    rjust
 
>>> "AbCdEfh".rjust(10)
'   AbCdEfh'
>>> "AbCdEfh".ljust(10,'-')
'AbCdEfh---'
>>> "AbCdEfh".rjust(10,'-')
'---AbCdEfh'
>>> "AbCdEfh".center(50,'-')
'---------------------AbCdEfh----------------------'
>>> "AbCdEfh".center(20)           #把字符串居中    
'      AbCdEfh       '
>>> "AbCdEfh".center(20,'-')  
'------AbCdEfh-------'

replace
返回把字符串中指定的旧子字符串替换成指定的新子字符串后生成的新字符串,
如果指定 count 可选参数则替换指定的次数,默认为指定的旧子字符串在字符串中出现的总次数。
语法:S.replace(old,new[,count=S.count(old)]
>>> s = 'Hello Word me love you'
>>> s.replace('e','M')  #e全部替换成M
'HMllo Word mM lovM you'
>>> s.replace('e','M',1) #只有1个e替换成M
'HMllo Word me love you'

>>> s =  "Hello  word M love yOU "   #把字符串的空格全部去掉了
>>> s.replace()
>>> s.replace(' ','')
'HellowordMloveyOU'

find  rfind Rindex
从字符串中找出某个子字符串第一个匹配项的索引位置,该方法与 index() 方法一样,只不过如果子字符串不在字符串中不会报异常,而是返回-1。
返回子字符串第一个匹配项出现在字符串中的索引位置,如果没有匹配项则返回-1
#实例
>>> s = 'Hello Word me love you'
>>> s.find('o')   #默认查找第一个o的索引
4
>>> s.find('a')   #查找a的索引、没有则返回-1
-1
>>> s.find('o',5,8) #查找第5到第8中间有没有o、有的话返回索引值,没有的话返回-1
7
>>> s.find('o',5)  #从索引5(下标)开始出现的第一个o的索引值
7
>>> s.find('o',8)  #从索引8(下标)开始出现的第一个o的索引值
15
#嵌套的str
[root@test01 ~/str]# cat str1.py
S1 = "Runoob example....wow!!!"
S2 = "exam";
print (S1.find(S2))
print (S1.find(S2, 5))
print (S1.find(S2, 10))
[root@test01 ~/str]# python str1.py
7
7
-1

#rfind Rindex

返回子字符串最后一次(也就是从右边开始数)出现在字符串中的的索引位置,
如果没有匹配项则返回-1。.
>>> 'Hello World'.rfind('o')
7
>>> 'Hello World'.rfind('a') #没有a返回-1
-1
>>> 'Hello World'.rindex('o')
7
>>> 'Hello World'.rindex('W') 
6
>>> 'Hello World'.rindex('a') #没有a则会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

count
用于统计字符串中某个子字符串出现的次数,可选参数为开始搜索与结束搜索的位置索引
#实例
>>> s = 'Hello Word me love you'
>>> s.count('o')    #o出现的全部次数
4
>>> s.count('o',0,5)  #索引0-5的位置只出现了1次o
1
实例:字符串包含字符串
[root@test01 ~/str]# cat str1.py
S="www.runoob.com"
sub='o'
print (S.count('o'))
print (S.count(sub))
sub='run'
print (S.count('run', 0, 10))
print (S.count(sub,0,10))
[root@test01 ~/str]# python str1.py
3
3
1
1

center
S.center(width[,fillchar])
width -- 字符串的总宽度。
fillchar -- 可选参数,填充字符,默认为空格
返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充、默认为空格
>>> s = 'Hello '
>>> s.center(20)
'       Hello        '
>>> s.center(20,'-')      
'-------Hello -------'
>>> s.center(20,'---')  #多个会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: The fill character must be exactly one character long

split、rsplit
通过指定分隔符对字符串进行分割并返回一个列表,默认分隔符为所有空字符,包括空格、换行(\n)、制表符(\t)等
指定的分隔符、分割后消失

#实例
>>> s = 'Hello Word me love you'
>>> s.split()
['Hello', 'Word', 'me', 'love', 'you']
>>> s.split('o')
['Hell', ' W', 'rd me l', 've y', 'u']
>>> s.split('o',1)  #从左边、指定分隔符1次
['Hell', ' Word me love you']
>>> s.rsplit('o',1)    #从右边、指定分隔符1次
['Hello Word me love y', 'u']

#------------------
>>> s = "get test.txt"
>>> s.split()[1]
'test.txt'

format 
基本语法是通过 {} 和 : 来代替以前的 % 。
format () 函数可以接受不限个参数,位置可以不按顺序
#!/usr/bin/python
#Author:LinYaoHong
#Date:2019-04-08
s3 = 'my names is {0} I am {1} year old  my jobs is {2}'
print(s3)
print(s3.format('Lin',22,'运维')) #把值赋给0 1 2
print('--------分割线---------')
s4 = 'my names is {name} I am {age} year old  my job is {job}'
print(s4)
print(s4.format(name='Lin',age=22,job='运维'))  #通过变量赋值给s4

#E:\Python\学习\venv\Scripts\python.exe E:/整理版笔记/python/第二章/str学习.py
my names is {0} I am {1} year old  my jobs is {2}
my names is Lin I am 22 year old  my jobs is 运维
--------分割线---------
my names is {name} I am {age} year old  my job is {job}
my names is Lin I am 22 year old  my job is 运维

join
将可迭代对象中的元素以指定的字符连接生成一个新的字符串
可迭代对象(字符串、列表、元祖、字典)
#实例:
>>> S1 = "-"
>>> S2 = ""
>>> iter = ("r", "u", "n", "o", "o", "b")  # 可迭代对象:元祖
>>> S1.join((iter))
'r-u-n-o-o-b'
>>> S2.join((iter))
'runoob'
#实例二:
>>> names = ['lin','yao','hong']
>>> print('-'.join(names))
lin-yao-hong
>>> print('.'.join(names))
lin.yao.hong
>>> n = print(''.join(names))
linyaohong
>>> n
linyaohong

  
  isalnum
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# isalnum如果str至少有一个字符并且所有字符都是字母或数字(不能包含空格)则返回 True,否则返回 False
>>> "This2019".isalnum()
True
>>> "This 2019".isalnum()
False
>>> "This 20*19".isalnum()
False

isidentifier
 
#isidentifier方法用于判断字符串是否是有效的 Python 标识符,可用来判断变量名是否合法
>>> "if".isidentifier()
True
>>> "def".isidentifier()
True
>>> "class".isidentifier()
True
>>> "_a".isidentifier()
True
>>> "中国123a".isidentifier()
True
>>> "123".isidentifier()
False
>>> "3a".isidentifier()
False
>>> "".isidentifier()
False

islower
 
#(区分大小写的)如果字符都是小写,不包含大写字母、则返回 True,否则返回 False
>>> 'Adf!123'.islower()
False
>>> 'AAAdsfasd'.islower()
False
>>> '3dfa'.islower()
True
>>> '3df! aaa'.islower()
True

istitle
 
Python istitle() 方法检测字符串中所有的单词拼   的  首字母是否为大写,且其他字母为小写
​​​​​​​>>> '12313123'.istitle()
False
>>> 'Hello World'.istitle()
True
>>> 'hello world'.istitle()
False
 
rpartition​​​​​​​
 
#rpartition() 方法类似于 partition() 方法,只是该方法是从目标字符串的末尾也就是右边开始搜索分割符。。
如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串
返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串

>>> 'Hello World'.rpartition(" ")
('Hello', ' ', 'World')
>>> 'Hello World'.rpartition('o')#从右边开始
('Hello W', 'o', 'rld')
>>> 'Hello World'.partition('o') #从左边开始
('Hell', 'o', ' World')
>>> 

zfill​​​​​​​
 
#Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0
>>> "hello world".zfill(1) #8位对齐,
'hello world'
>>> "hello world".zfill(8) #8位对齐,
'hello world'
>>> "hello world".zfill(12) #12位对齐,前面用0填充
'0hello world'
>>> "hello world".zfill(16) #16位对齐,前面用0填充
'00000hello world'
 
splitlines​​​​​​​

 
>>> 'Hello\n World \nI \nLov\ne  YOU'.splitlines() #按行分割成列表
['Hello', ' World ', 'I ', 'Lov', 'e  YOU']
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站