0
点赞
收藏
分享

微信扫一扫

Python——字符串详解

北冥有一鲲 2022-03-24 阅读 56
Python

字符串方法

方法解释
capitalize()返回一个首字母大写版本的新字符串(其它字母小写)
casefold()返回一个小写版本的字符串(所有都小写)
center(width, fllchar=’’)返回一个字符居中的新字符串(width<=字符串宽度,新字符串=原字符串;width>字符串宽度,所有字符居中,左右使用fillchar参数指定的字符填充)
count(sub[, start[, end]])返回sub在字符串中不重叠的出现次数,可选参数start和end用于指定起始和结束位置
encode(encoding=‘utf-8’, errors=‘strict’)以encoding参数指定的编码格式对字符串进行编码。errors参数指定编码出现错误时的解决方案:默认的’strict’标识如果出错,将抛出一个UnicodeEncodeError的异常。其它可用参数值为:‘ignore’, ‘replace’和’xmlcharrefreplace’
endswith(suffix[, start[, end]])如果字符串是以suffix指定的子字符串为结尾那么返回True,否则返回False;可选参数start和end用于指定起始和结束位置;suffix参数允许以元组的形式提供多个子字符串
expandtabs([tabsize=8])返回一个使用空格替换制表符的新字符串,如果没有指定tabsize参数,那么默认一个制表符=8个空格
find(sub[, start[, end]])在字符串中查找sub子字符串,返回匹配的最低索引值;可选参数start和end用于指定起始和结束位置;如果未能匹配字符串,返回-1
format(*args, **kwargs)返回一个格式化的新字符串;使用位置参数args和关键字参数kwargs进行替换
format_map(mapping)返回一个格式化的新字符串;使用映射参数mapping进行替换
index(sub[, start[, end]])在字符串中查找sub子字符串,返回匹配的最低索引值;可选参数start和end用于指定起始和结束位置;如果未能匹配子字符串,抛出ValueError异常
isalnum()付过字符串中至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
isalpha()如果字符串中至少有一个字符并且所有字符都是字母则返回True,否则返回False
isascii()如果字符串中所有字符都是ASCII则返回True,否则返回False;ASCII字符编码范围是U+0000~U+007F,空字符串也是ASXII
isdecimal()如果字符串中至少有一个字符并且所有字符都是十进制数字则返回True,否则返回False
isdigit()如果字符串中至少有一个字符串并且所有字符都是数字则返回True,否则返回False
isidentifier()如果字符串是一个合法的Python标识符则返回True,否则返回False;调用keyword.iskeyword(s)可以监测字符串是否是一个保留标识符
islower()如果字符串中至少包含一个区分大小写的英文字母,并且这些字母都收小写,则返回True,否则返回False
isnumeric()如果字符串中至少有一个字符并且所有字符都是数字则返回True,否则返回False
isprintable()如果字符串是可以打印的内容则返回True,否则返回False
isspace()如果字符串中至少有一个字符并且所有字符都是空格,则返回True,否则返回False
istitle()如果字符串是标题化字符串(所有的单词都是以大写开始,其余字母小写)则返回True,否则返回False
isupper()如果字符串中至少包含一个区分大小写的英文字母,并且这些字母都是大写,则返回True,否则返回False
join(iterable)连接过个字符串并返回一个新字符串;以调用该方法的字符串作为分隔符,插入到iterable参数指定的每个字符串的中间
ljust(width, fillchar=’’)返回一个字符左对齐的新字符串(width<=字符串宽度,新字符串=原字符串;width>字符串宽度,所有字符左对齐,左右使用fillchar参数指定的字符填充)
lower()返回一个所有引文字母都转换成小写后的新字符串
lstrip(chars=None)返回一个去除左侧空白字符的新字符串;通过chars参数可以指定将要去除的字符串
partition(sep)在字符串中搜索sep参数指定的分隔符,如果找到,返回一个3元组(在sep前面的部分,sep,在sep后面的部分);如果未找到,则返回(愿字符串,)
removeprefix(prefix)如果存在prefix参数知道哪个的前缀子字符串,则返回一个将该前缀去除后的新字符串;如果不存在,则返回一个原字符串的拷贝
removesuffix(suffix)如果存在suffix参数指定的后缀子字符串,则返回一个将该后缀去除后的薪资堵车;如果不存在,则返回一个原字符串的拷贝
replace(old, new, count=-1)返回一个将所有old参数之帝国的字符串替换为new的新字符串;count参数指定替换的次数,默认是-1,表示全部替换
rfind(sub[, start[, end]])在字符串中自右向左查找sub子字符串,返回匹配的最高索引值;可选参数start和end用于指定起始和结束位置;如果未能匹配子字符串,返回-1
rindex(sub[, start[, end]])在字符串中自右向左查找sub子字符串,返回匹配的最高索引值;可选参数start和end用于指定起始和结束位置;如果未能匹配子字符串,抛出ValueError异常
rjust(width, fillchar=’’)返回一个字符左对齐的新字符串(width<=字符串宽度,新字符串=原字符串;width>字符串宽度,所有字符右对齐,左右使用fillchar参数指定的字符填充)
rpartition(sep)在字符串中自右向左搜索sep参数指定的分隔符,如果找到,返回一个3元组(在sep前面的部分,sep,在sep后面的部分);如果未找到,则返回(, ,愿字符串)
rsplit(sep=None, maxsplit=-1)将字符串自右向左进行分割,并将结果以列表的形式返回;sep参数指定一个字符串所谓分割的依据,默认是空白字符串;maxsplit参数用于指定分割的次数(分割2次即为3份),默认是无限制
rstrip(chars=None)返回一个去除右侧空白字符的新字符串;通过chars参数可以指定将要去除的字符串
split(sep=None, maxsplit=-1)将字符串进行分割,并将结果以列表的形式返回;sep参数指定一个字符串所谓分割的依据,默认是空白字符串;maxsplit参数用于指定分割的次数(分割2次即为3份),默认是无限制
startswith(prefix[, start[, end]])如果存在prefix参数指定的前缀字符串,则返回True,否则返回False;可选参数start和end用于指定起始和结束位置;prefix参数允许以元组的形式提供多个子字符串
strip(chars=None)返回一个去除左右两侧空白字符的新字符串;通过chars参数可以指定将要去除的字符串
swapcase()返回一个大小写字母翻转的新字符串
titile()返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串
translate(table)返回一个根据table参数转换后的新字符串;table参数应该提供一个转换规则(可以由str.maketrans(‘a’,‘b’)进行定制,例如"Mike".translate(str.maketrans(“Me”, "15))->‘1ik5’)
upper()返回一个所有英文字母都转换成大写后的新字符串
zfill(width)返回一个左侧用0田中的新字符串(width<=字符串宽度,新字符串=原字符串;width>字符串宽度,所有字符串右对齐,左侧使用0进行填充)

大小写转换

  1. capitalize()
  2. casefold()
  3. title()
  4. swapcase()
  5. upper()
  6. lower()
str = 'I am Chinese'
print(str.capitalize())
print(str.casefold())
print(str.title())
print(str.swapcase())
print(str.upper())
print(str.lower())

I am chinese
i am chinese
I Am Chinese
i AM cHINESE
I AM CHINESE
i am chinese

对齐

  1. center(width, fillchar=’’)
  2. ljust(width, fillchar=’’)
  3. rjust(width, fillchar=’’)
  4. zfill(width)
str = 'tomcat'
print('##########')
print(str.center(10))
print(str.center(10, '*'))
print(str.center(5))

print('##########')
print(str.ljust(10))
print(str.ljust(10, '*'))
print(str.ljust(5))

print('##########')
print(str.rjust(10))
print(str.rjust(10, '*'))
print(str.rjust(5))

print('##########')
print(str.zfill(10))
print(str.zfill(5))

##########
  tomcat  
**tomcat**
tomcat
##########
tomcat    
tomcat****
tomcat
##########
    tomcat
****tomcat
tomcat
##########
0000tomcat
tomcat

查找

  1. count(sub[, start[, end]])
  2. find(sub[, start[, end]])
  3. rfind(sub[, start[, end]])
  4. index(sub[, start[, end]])
  5. rindex(sub[, start[, end]])
str = "上海自来水来自海上";
print(str.count('海'))
print(str.count('海', 0, 5))


print(str.find('海'))
print(str.find('海', 5, -1))
print(str.find('我'))

print(str.rfind('海'))
print(str.rfind('海', 0, 5))
print(str.rfind('我'))

print(str.index('海'))
print(str.index('海', 5, -1))
print(str.index('我'))

print(str.rindex('海'))
print(str.rindex('海', 5, -1))
print(str.rindex('我'))


2
1
1
7
-1
7
1
-1
1
7
Traceback (most recent call last):
  File "stringtest.py", line 57, in <module>
    print(str.index('我'))
ValueError: substring not found

替换

  1. expandtabs([tabsize=8])
  2. replace(old, new, count=-1)
  3. translate(table)
xxx = """
        print("I am Chinese")
    print("end")"""
print(xxx.expandtabs(4))


xxx = "abcdcba"
print(xxx.replace("b", "o"))
print(xxx.replace("b", "o", 1))


table =  str.maketrans("ABCDEFG", "1234567", "Bb") #第三个参数填写忽略的字符串
print("AaBbCcDdEeFfGg".translate(table))


#        print("I am Chinese")
#    print("end")
#aocdcoa
#aocdcba
#1a3c4d5e6f7g

判断

  1. startswith(prefix[, start[, end]])
  2. endswith(suffix[, start[, end]])
  3. isupper()
  4. islower()
  5. istitle()
  6. isalpha()
  7. isascii()
  8. isspace()
  9. isprintable()
  10. isdecimal()
  11. isdigit()
  12. isnumeric()
  13. isalnum()
  14. isidentifier()
print("abcde".startswith("a")) #True
print("abcde".startswith("c", 2, -1)) #True

print("abcde".endswith("e")) #True
print("abcde".endswith("c", 0, 2)) #False

x = ("x", "y", "z")
print("abx".startswith(x)) #True

print("abcde".isupper()) #False
print("ABC".isupper()) #True

print("abcde".islower()) #True
print("aBC".islower()) #False
 
print("I am Chinese".istitle()) #False
print("I Am Chinese".istitle()) #True

print("abc".isalpha()) #True
print("a b c".isalpha()) #False
print("1abc".isalpha()) #False

print("".isspace()) #False
print("\t".isspace()) #True
print("\n".isspace()) #True

print("a".isprintable()) #True
print("a\n".isprintable()) #False

x = "12345" #十进制
print(x.isdecimal()) #True
print(x.isdigit()) #True
print(x.isnumeric()) #True

x = "2²" #平方
print(x.isdecimal()) #False
print(x.isdigit()) #True
print(x.isnumeric()) #True

x = "Ⅱ" #罗马数字
print(x.isdecimal()) #False
print(x.isdigit()) #False
print(x.isnumeric()) #True

x = "一二三四五" #中文
print(x.isdecimal()) #False
print(x.isdigit()) #False
print(x.isnumeric()) #True

# 另外isalnum()方法只要isalpha(),isdecimal(),isdigit()或isnumeric()中有一个返回true,则返回true

print("_if".isidentifier()) #True
print("1while".isidentifier()) #False
print("w2".isidentifier()) #True

判断是否为关键字

import keyword
print(keyword.iskeyword("if")) #True
print(keyword.iskeyword("while")) #True

截取

  1. strip(chars=None)
  2. lstrip(chars=None)
  3. rstrip(chars=None)
  4. removeprefix(prefix)
  5. removesuffix(suffix)
print("   aa   ".lstrip())
print("   aa   ".rstrip())
print("   aa   ".strip())
print("www.baidu.com".strip("w.com"))

print("www.baidu.com".removeprefix("www."))
print("www.baidu.com".removesuffix(".com"))

aa   
   aa
aa
baidu
baidu.com
www.baidu

拆分和拼接

  1. partition(sep)
  2. rpartition(sep)
  3. split(sep=None, maxsplit=-1)
  4. rsplit(sep=None, maxsplit=-1)
  5. splitlines(keepends=False)
  6. join(iterable)
print("www.baidu.com".partition("."))
print("www.baidu.com".rpartition("."))

print("www.baidu.com".split("."))
print("www.baidu.com".split(".", 1))
print("www.baidu.com".rsplit(".", 1))

print("a\nb\rc\r\nd".splitlines())
print("a\nb\rc\r\nd".splitlines(True))

print(".".join(['a','b','c']))


('www', '.', 'baidu.com')
('www.baidu', '.', 'com')
['www', 'baidu', 'com']
['www', 'baidu.com']
['www.baidu', 'com']
['a', 'b', 'c', 'd']
['a\n', 'b\r', 'c\r\n', 'd']
a.b.c

格式化

  1. format(*args, **kwargs)
print("中华人民共和国成立于{}年".format(1949))
print("1+2={},2的平方是{},3的立方是{}".format(1+2, 2*2, 3*3*3))
print("{0}{1}".format(0, 1))
print("{1}{0}".format(0, 1))
print("{1}{1}".format(0, 1))
print("{},{},{}".format(1,"{}", 2))
print("{},{{}},{}".format(1, 2))

中华人民共和国成立于19491+2=32的平方是43的立方是27
01
10
11
1,{},2
1,{},2

详细参数选项:

参数可选项
format_spec[[fill]align][sign][#][0][width][frouping_option][.precision][type]
fill<any character>
align“<”, “>”, “=”, “^”
sign“+”, “-”, " "
widthdigit+
grouping_option“_”, “,”
precisiondigit+
type“b”, “c”, “d”, “e”, “E”, “f”, “F”, “g”, “G”, “n”, “o”, “s”, “x”, “X”, “%”

对齐:align

  • < :强制字符串在可用空间内左对齐
  • > :强制字符串在可用空间内右对齐
  • = :强制填充放置在符号(如果有)之后但在数字之前的位置(适用于以"±------120"的形式打印字符串)
  • ^ :强制字符串在可用空间内居中
# 位置索引为0,对齐方向为<,宽度为10
print("{0:<10}".format(111))
print("{0:=10}".format(111))
print("{0:>10}".format(111))
print("{0:^10}".format(111))

111       
       111
       111
   111    

宽度:width

print("{:10}".format(111))
#添加前导0,可区分正负填充0,只对数字有效
print("{:010}".format(111))
print("{:010}".format(-111))

0000000111
-000000111

填充:fill

print("{0:%>10}{1:*>10}".format(111, 111))

%%%%%%%111*******111

符号:sign(只对数字有效)

  1. + :正数前面添加+号,负数在前面添加-号
  2. - :只有负数在前面添加负号,默认行为
  3. 空格 :正数在前面添加一个空格,负数在前面添加一个负号
print("{:+}&{:-}&{: }".format(1,1,1))
print("{:+}&{:-}&{: }".format(-1,-1,-1))

+1&1& 1
-1&-1&-1

千分位分隔符:grouping_option
如果不足千位,分隔符不显示

  1. , :即为逗号
  2. _ :即为 下划线
print("{:,}".format(12345567))
print("{:_}".format(1233235))

12,345,567
1_233_235

精度:.precision

  1. 对于type设置为f或者F的浮点数来说,是限制小数点后显示多少位
  2. 对于type设置为g或者G的浮点数来说,是限制小数点前后一共显示多少位
  3. 对于非数字类型来说,限制最大字段的大小
  4. 对于整数来说,不允许使用该选项
print("{:.2f}".format(3.1415))
print("{:.2g}".format(3.1415))
print("{:.6}".format("abcdefghij"))

3.14
3.1
abcdef

类型:type

  1. b : 参数以二进制形式输出
  2. c :参数以Unicode字符形式输出
  3. d :参数以十进制形式输出
  4. o :参数以八进制形式输出
  5. x :参数以十六进制形式输出
  6. X :参数以十六进制的形式输出
  7. n :和d类似,不同的是会使用当前语言环境设置的分隔符插入到恰当的位置
  8. None :和d一样
print("{:b}".format(16))
print("{:#b}".format(16))
print("{:c}".format(16))
print("{:d}".format(16))
print("{:o}".format(16))
print("{:#o}".format(16))
print("{:x}".format(16))
print("{:#x}".format(16))
print("{:X}".format(16))
print("{:n}".format(16))
print("{:}".format(16))

10000
0b10000

16
20
0o20
10
0x10
10
16
16
  1. e :参数以科学记数法形式输出(e标示指数,默认精度为6)
  2. E : 参数以科学记数法形式输出(E标示指数,默认精度6)
  3. f :参数以定点表示法形式输出(不是数用nan标示,无穷用inf标示,默认精度为6)
  4. F : 参数以定点表示法形式输出(不是数用NAN标示,无穷用INF标示,默认精度为6)
  5. g :通用格式,小数以f输出,大数以e输出
  6. G :通用格式,小数以F输出,大数以E输出
  7. n :和g类似,会使用当前语言环境设置的分隔符插入到恰当的位置
  8. % :以百分比的形式输出(将数字乘以100并显示为定点表示法f的形式,后面附带一个百分号)
  9. Nono :类似与g,当使用定点表示法时,小数点后至少显示一位;默认精度与给定所需精度一致
print("{:e}".format(1.231241412))
print("{:E}".format(1.231241412))
print("{:f}".format(1.234232556))
print("{:F}".format(1.234232556))

print("{:g}".format(123456789))
print("{:g}".format(1234.56789))
print("{:G}".format(123456789))
print("{:G}".format(1234.56789))

print("{:%}".format(0.32423))
print("{:.2%}".format(0.32423))


1.231241e+00
1.231241E+00
1.234233
1.234233
1.23457e+08
1234.57
1.23457E+08
1234.57
32.423000%
32.42%

综合:

print("{:.{prec}f}".format(3.1415, prec=2))
print("{:{fill}{align}{width}.{prec}{ty}}".format(3.1415, fill="+", align='^', width=10, prec=3, ty='g'))


3.14
+++3.14+++

f-字符串

year = 1949
print(f"中国成立于{year}年")

print(f"1+2={1+2},2的平方是{2*2},3的立方是{3*3*3}")

print(f"{520:010}")
print(F"{-520:010}")


中国成立于1949年
1+2=3,2的平方是4,3的立方是27
0000000520
-000000520
# 测试回文数
x = '12321'
flag = True if x == x[::-1] else False
print(flag)

# True
举报

相关推荐

0 条评论