Python字符串详解


一、
字符串详解

1、字符串特点

  • 字符串创建后不可修改;
  • 若要拼接或修改创建好的字符串都会造成重新生成字符串;
  • 只能进行加减运算
  • 字符串用单引号或双引号引起来,例如:"this is a String"  'this is a String'

2、字符串常用功能

 

需求描述 右列代码的解释 实现代码举例

判断和转换字符串大小写


包含常见字符; v = "heLlO"    x= v.lower()    print(x)
包含常见字符;  v = "heLlO"    x= v.islower()    print(x)
包含常见字符;  v = "heLlO"    x= v.upper()    print(x)
包含常见字符;  v = "heLlO"    x= v.isupper()    print(x)

查找字符串子序列的索引位置
从开始往后找,找到第一个就获取其位置,并终止查找; v = "012312"  x = v.find('12')        print(x)
从指定位置找,此功能的前边位置为开区间>=,后边位置为闭区间<; v = "012312"  y = v.find('12',4,6)   print(y)
字符串拼接  

a = "你好你好"  a = " ".join(a)  print(a)

去除左右空格字符和不可见字符 备注:若括号内写字符,则移除指定字符,从最多开始匹配; a = "   hello   "  b = a.strip()   print(b)
去除左空格字符和不可见字符 备注:若括号内写字符,则移除指定字符,从最多开始匹配; a = "   hello   "  b = a.lstrip()   print(b)
去除右空格字符和不可见字符 备注:若括号内写字符,则移除指定字符,从最多开始匹配; a = "   hello   "  b = a.rstrip()   print(b)
分隔信息,指定分隔段数,从左到右 备注:指定分隔符不显示 a = "abcdffodooodxxx"  b = a.split("d")   print(b)
分隔信息,指定分隔段数,从右到左 备注:指定分隔符不显示 a = "abcdffodooodxxx"  b = a.rsplit("d")   print(b)
字符串的替换 代码中的2指只替换前两个匹配字符,如果 不指第三个参数则全替换。 a = "hallohallohallo"  b = a.replace("a","e",2)
获取字符串中的某一个字符   a = "hello"  b = a[3]    print(b)
0>=范围<3     -1代表最后一位  -2代表倒数第二位; a = "hello"  b = a[0:3]    print(b)

Python3中获取的是字符的个数

Python2.7中获取的是字符的字节数

Python3中获取的是字符的个数

Python2.7中获取的是字符的字节数

a = "hello"  b = len(a)    print(b)
检查以什么开头  

v = "heLlO"    y = v.startswith('h')   print(y) 

检查以什么结尾  

v = "heLlO"    y = v.endswith('O')   print(y) 

一个个输出字符串的方法  a为变量名 

test = "降龙十八掌"

for a  in test:

  print(a)

创建一个范围的数字

0>=范围<100  5为设置的步长(默认步长则是连续的),

范围如果从100到0,则步长需要时负数,比如是-1。

注意:Python2.7中一次性创建范围内所有数字;而Python3则做了优化,

只能通过for循环每次创建一个数字;

如果要再Python2中也一个个创建,则需要使用xrange;

a = range(0,100,5)

for iterm in a:

  print(iterm)

 

3、字符串不常用功能

 

需求描述 右列代码的解释 实现代码举例
首字母大写   v = "hello"     x = v.capitalize()    print(x)
字母大写变小写 包含常见和不常见字符; v = "heLlO"    x = v.casefold()    print(x)
设置宽度并将内容居中 20代表内容所占宽度,*位置只能用一个字符,不能是数字,但是可有可无;  v = "Hello"     x = v.center(20,"*")    print(v)  
计算字符或子序列出现多少次 L位置要统计的字符或者子序列, 5,6代表要统计的始末位置;  v = "heLlO"    x = v.count("L",5,6)    print(x) 
查找子序列的位置 index与find不同的是:find没找到显示-1,index查找不到会报错;  v = "01632"    x = v.index('9')       print(x)
用户数据套用模板格式进行输出   test = "i am {name}",age(a)     i = test.format(name="tom",a=19)   print(i) 
  test = "i am {0}",age(1)         i = test.format("tom",19)         print(i)
  test = "i am {name}",age(a)   i = test.format_map({"name":"tom","a":19})    print(i)
判断字符串中是否只是包含的字母和数字   test = "123abc"   v = test.isalnum()   print(v) 
判断字符串中是否只是包含字母   test = "123abc"   v = test.isalpha()   print(v) 
调整列宽为指定长度,常用语做表格  \t 制表符  \n 换行符 test = "123\tabc\tcdd\t\n123\tabc\tcdd\t"   v = test.expandtabs(20)   print(v)
判定输入的是否是数字 不支持识别特殊格式的数字  a = "123"  x = a.isdecimal()   print(x)
判定输入的是否是数字 支持识别特殊格式的数字 a = "123"  x = a.isdigit()   print(x)
判定输入的是否是数字 支持识别特殊格式的数字和中文数字 a = "123"  x = a.isnumeric()   print(x) 
判断输出的内容是否有不可显示的字符   a = "123/t"  x= a.printable()   print(x) 
判断是否全部都是空格   a = "     "  x= a.isspace()   print(x) 
判断是否是标题    a = "Hello Word"  x= a.istitle()   print(x) 
将非标题变成标题    a = "Hello word"  x= a.title()   print(x) 
指定占用宽度并将内容居中  20为宽度,"*"为填充字符 a = "hello"  b = a.center(20,"*")   print(b)
指定占用宽度并将内容居左  20为宽度,"*"为填充字符 a = "hello"  b = a.ljust(20,"*")   print(b)
指定占用宽度并将内容居右  20为宽度,"*"为填充字符 a = "hello"  b = a.rjust(20,"*")   print(b)
规避敏感信息  

v1 = "不良言论" v2 = "****"    v3 = str.maketrans(v1,v2)

a = "某人发表的不良言论"  b = a.translate(v3)   print(b)

分隔信息,只能分隔三段; 从左到右 备注:指定分隔符显示  a = "abcdffodooodxxx"  b = a.partition("d")   print(b)
分隔信息,只能分隔三段; 从右到左 备注:指定分隔符显示 a = "abcdffodooodxxx"  b = a.rpartition("d")   print(b)
只能根据换行符分隔 参数解释:True显示/n,flase不显示换行符 a = "abcdf/nodoo/nodxxx"  b = a.rsplitlines(True)   print(b)
大小写转换   a = "hello"  b = a.swapcase()   print(b)

二、字符串拼接

1、百分号字符串拼接

1)举例:%s 可以接收任何值,%d只可以接收数字

aaa = 'i am %s my hobby is %s' % ('xxx','yyy')
aaa = 'i am %s my hobby is %s' % ('xxx',1)
aaa = 'i am %s my hobby is %s' % ('xxx',[1,2])
name = 'xxx'
age = 33
aaa = 'i am %s my hobby is %d' % (name,age)

说明:%.3s中的.3的意思是 接收的数据长度为3位,不常用,知道即可;

  2)举例:%f用来拼接浮点数

tpl = "percent %.2f" % 99.976236666666        #%.2f中的.2代表四舍五入保留小数点后两位长度的小数

tpl = 'percent %.2f %%' % 99.9762366666666      #%% 代表打印%符号

tpl = "i am %(name)s age %(age)d" % {"name": "aaa", "age": 18}    #使用字典传值

msg='i am %(name)+60s my hobby is alex' %{'name':'lhf'}        

msg='i am \033[43;1m%(name)+60s\033[0m my hobby is alex' %{'name':'lhf'}    #拼接内容增加颜色

print('root','x','0','0',sep=':')        #用指定符号来为字符串分隔

3)%拼接理论知识

%[(name)][flags][width].[precision]typecode

    • (name) 可选,用于选择指定的key
    • flags 可选,可供选择的值有:
      •   + 右对齐;正数前加正好,负数前加负号;
      •   - 左对齐;正数前无符号,负数前加负号;
      •   空格 右对齐;正数前加空格,负数前加负号;
      •   0 右对齐;正数前无符号,负数前加负号;用0填充空白处
    • width 可选,占有宽度
    • .precision 可选,小数点后保留的位数
    • typecode 必选
      • s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
      • r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
      • c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
      • o,将整数转换成 八 进制表示,并将其格式化到指定位置
      • x,将整数转换成十六进制表示,并将其格式化到指定位置
      • d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
      • e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
      • E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
      • f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
      • F,同上
      • g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
      • G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
      • %,当字符串中存在格式化标志时,需要用 %%表示一个百分号

  注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式

2、format字符串拼

  1)format拼接常用功能举例

aabbc = "i am {}, age {}, {}".format("six", 18, 'tom')
aabbc = "i am {}, age {}, {}".format(*["six", 18, 'tom'])
aabbc = "i am {0}, age {1}, really {0}".format("six", 18)
aabbc = "i am {0}, age {1}, really {0}".format(*["six", 18])
aabbc = "i am {name}, age {age}, really {name}".format(name="six", age=18)
aabbc = "i am {name}, age {age}, really {name}".format(**{"name": "six", "age": 18})
aabbc = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])
aabbc = "i am {:s}, age {:d}, money {:f}".format("six", 18, 88888.1)
aabbc = "i am {:s}, age {:d}".format(*["six", 18])
aabbc = "i am {name:s}, age {age:d}".format(name="six", age=18)
aabbc = "i am {name:s}, age {age:d}".format(**{"name": "six", "age": 18})
aabbc = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2) 
aabbc = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
aabbc = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)

说明:#b代表二进制,o代表8进制,d代表证书,x代表十六进制小写,X代表十六进制大写,%代表转换为百分

2)format理论知识

[[fill]align][sign][#][0][width][,][.precision][type]

    • fill           【可选】空白处填充的字符
    • align        【可选】对齐方式(需配合width使用)
      • <,内容左对齐
      • >,内容右对齐(默认)
      • =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
      • ^,内容居中
    • sign         【可选】有无符号数字
      • +,正号加正,负号加负;
      •  -,正号不变,负号加负;
      • 空格 ,正号空格,负号加负;
    • #            【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
    • ,            【可选】为数字添加分隔符,如:1,000,000
    • width       【可选】格式化位所占宽度
    • .precision 【可选】小数位保留精度
    • type         【可选】格式化类型
      • 传入” 字符串类型 “的参数
        • s,格式化字符串类型数据
        • 空白,未指定类型,则默认是None,同s
      • 传入“ 整数类型 ”的参数
        • b,将10进制整数自动转换成2进制表示然后格式化
        • c,将10进制整数自动转换为其对应的unicode字符
        • d,十进制整数
        • o,将10进制整数自动转换成8进制表示然后格式化;
        • x,将10进制整数自动转换成16进制表示然后格式化(小写x)
        • X,将10进制整数自动转换成16进制表示然后格式化(大写X)
      • 传入“ 浮点型或小数类型 ”的参数
        • e, 转换为科学计数法(小写e)表示,然后格式化;
        • E, 转换为科学计数法(大写E)表示,然后格式化;
        • f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
        • F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
        • g, 自动在e和f中切换
        • G, 自动在E和F中切换
        • %,显示百分比(默认显示小数点后6位)
posted @ 2019-12-17 14:57  IamJet  阅读(475)  评论(0编辑  收藏  举报