4、字符串String

1、String 字符串

  • 所谓字符串,就是由零个或多个字符组成的有限序列,用来记录文本信息。
  • Python中的字符串用单引号 ' 、双引号 " 、三单引号'''、三双引号""" 括起来。
  • 单引号内可以包含双引号,双引号内可以包含单引号。
  • 三引号字符串中的换行会自动转换为换行符'\n',三引号内可以包含单引号和双引号。

      1.1 转义字符

                字符串中使用\(反斜杠)来表示转义,也就是说\后面的字符不再是它原来的意义。

转义字符描述
\(在行尾时)续行符
\\反斜杠符号
\'单引号
\"双引号
\a响铃 (发出响声)
\b退格(Backspace)
\e转义
\000
\n换行
\v纵向制表符
\t横向制表符
\r回车
\f换页
\0yy八进制数,yy代表的字符,例如:\12代表换行
\xyy十六进制数,yy代表的字符,例如:\x0a代表换行
\other其它的字符以普通格式输出,
\unicode\u9a86  “骆” 字

   raw字符串(原始字符串)

              格式:r'字符串内容'

              作用:让转义符号 \ 无效

    1.2 字符串运算符

 操作符                                         描述          实例 eg:a="Hello"  b="Python"
     +字符串连接a + b : HelloPython
     *重复输出字符串a*2 :HelloHello
     []通过索引获取字符串中的字符a[1] : e
   [ : ]截取字符串中的一部分,左闭右开a[1:4] : ell
    in成员运算符,包含返回True'H' in a : True
  not in成员运算符,不包含返回True'M' not in a: True
   r/R原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写,无区别)以外,与普通字符串有着几乎完全相同的语法。print(r"hello\nhello"): hello\nhello
    %格式化字符串print ("学习 %s " % b):学习Python

      1.3 字符串格式化  参考:https://www.cnblogs.com/poloyy/p/12443158.html

               字符串格式化两种方式: %   format  

               format格式化函数:三种方式。最好不要混合使用,容易出问题。    

#1、不设置指定位置,按默认顺序
print("{}{}{}{}".format(1,2,3,4))
运行结果:1234
#2、设置指定位置,从0开始。
print("{1}{0}{2}{3}".format(1,2,3,4))
运行结果:2134
#3、带关键字传输。
print("今天是{name}的{key}生日会".format(22, 11, name="帅哥", key=18))
print("今天是{name}的{key}生日会,接着上{}".format("test", name="帅哥", key=18))
运行结果:今天是帅哥的18生日会
         今天是帅哥的18生日会,接着上test

注意:下面会报错
# print("今天是{0}的{}生日会".format("帅哥", 18))
# print("今天是{name}的{key}生日会,接着上{}".format( name="帅哥", key=18,"test"))
当你只写了 {} 时,默认按传入的值的顺序读取
当你写了数字编号 {1} ,则可以读取对应位置上的值,从0开始
当你指定了关键字 {name} ,如果不指定 name=xxx ,则会报错
当你指定了关键字,又只写了 {} 时,你传入带有关键字指定的值必须写在后面,类似函数(形参在前,实参在后)
{} 和 {1} 是不能共存的
                                      字符串格式化符号
     符   号                    描   述
      %c 格式化字符及其ASCII码
      %s 格式化字符串
      %d 格式化整数
      %u 格式化无符号整型
      %o 格式化无符号八进制数
      %x 格式化无符号十六进制数
      %X 格式化无符号十六进制数(大写)
      %f 格式化浮点数字,可指定小数点后的精度
      %e 用科学计数法格式化浮点数
      %E 作用同%e,用科学计数法格式化浮点数
      %g %f和%e的简写
      %G %f 和 %E 的简写
      %p 用十六进制数格式化变量的地址
格式化操作符辅助指令
符号功能
*定义宽度或者小数点精度
-用做左对齐
+在正数前面显示加号( + )
<sp>在正数前面显示空格
#在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
0显示的数字前面填充'0'而不是默认的空格
%'%%'输出一个单一的'%'
(var)映射变量(字典参数)
m.n.m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

       

2、字符串的方法

  • 类型判断   
  1. str.islower()   是否全为小写
  2. str.isupper()   是否全为大写
  3. str.istitle()      是否为标题,即各单词首字母大写
  4. str. isspace() 判断字符串是否是空白(空格、制表符、换行符等)字符,没有任何字符是不算是空白。
  5. str.isalpha()   是否全为字母
  6. str.isalnum()  是否全为字母或数字
  7. str.isdigit()  如果字符串只包含数字则返回 True 否则返回 False
  8. str.isnumeric()是否只包含数字字符
  9. str.isdecimal()是否只包含十进制数字字符
  10. str. isidentifier()是否满足标识符定义规则,可用来判断变量名是否合法。如果字符串仅包含字母数字字母(az)和(0-9)或下划线                            (_),则该字符串被视为有效标识符。有效的标识符不能以数字开头或包含任何空格。
  11. str. isprintable() 是否是可打印字符(例如制表符、换行符就不是可打印字符,但空格是)
a = "python"
a.islower()     #True 是否全为小写
a.istitle()     #False  是否是标题
a. isspace()    #False 是否包含空格
a.isalpha()     #True 是否全是字母
a.isalnum()   #True 
a.isdigit()   #False
a.isnumeric() #False
a.isdecimal() #False
a. isidentifier() #True
a. isprintable() #True
  • 大小写(字符串本身不改变,会返回改变后的值)
  1. str. lower()    全部转换为小写
  2. str. upper()    全部转换为大写
  3. str. capitalize()    转换为首字母大写,其他字母小写
  4. str. title()    转换为各单词首字母大写
  5. str. swapcase()    大小写互换(大写–>小写,小写–>大写)
  6. str. casefold()    转换为大小写无关字符串比较的格式字符串其效果和 lower() 方法非常相似,都可以转换字符串中所有大写字符为小写。两者的区别是:lower() 方法只对ASCII编码,也就是‘A-Z’有效,对于其他语言(非汉语或英文)中把大写转换为小写的情况只能用 casefold() 方法。
a = "Python"
print(a.lower()) #python is the best language!
print(a.upper())   #PYTHON IS THE BEST LANGUAGE!
print(a.capitalize()) #Python is the best language!
print(a.title())     #Python Is The Best Language!
print(a.swapcase())  #pYTHON IS THE BEST LANGUAGE!
print(a.casefold())  #python is the best language!

 

  • 字符串的填充与对齐
  1. str. center (width[, fillchar]) 将字符串居中左右两边使用fillchar进行填充, 使得整个字符串的长度为width。fllchar默认为空格。如果width小于 字符串的长度,则无法填充直接返回字符串本身(不会创建新字符串对象)。
  2. str. ljust(width[, fillchar]) 左对齐     ljust()使用fillchar填充在字符串S的右边,使得整体长度为width。
  3. str. rjust (width[, fillchar]) 右对齐   rjust()则 是填充在左边。如果不指定fillchar,则默认使用空格填充。如果width小于 或等于字符串S的长度,则无法填充,直接返回字符串S(不会创建新字符串对象)。
  4. str. zfill (width) 前方补0用0填充在字符串S的左边使其长度为width。如果S前有正负号+/-,则0填充在这两个符号的后面,且符号也算入长度。如果width小于或等 于S的长度,则无法填充,直接返回S本身(不会创建新字符串对象)。
  5. str. expandtabs([tabsize])   将字符串S中的\t替换为一定数量的空格。默认N=8。注意,expandtabs(8)不是将\t直接替换为8个空格。例如’xyz\tab’ expandtabs()会将\t替换为5个空格,因为"xyz" 占用了3个字符位。所以,在替换"\t"为空格时,会减掉"\t"前面的字符数量。如果"'t"的前面正好没有字符, 则直接将"\t"替换为N个空格。另外,它不会替换换行符(\n或\r)。
s = "hello"
print(s.center(10,"*")) #  **hello***
print(s.ljust(10,"*"))  #  hello*****
print(s.rjust(10,"*"))  #  *****hello
print(s.zfill(10))      #  00000hello
str = "runoob\t12345\tabc" 
print(str.expandtabs())    #  runoob  12345   abc
print(str.expandtabs(10))  #  runoob    12345     abc
  • 字符串的修剪
  1. str. strip([chars])    移除左右两边的字符chars
  2. str. lstrip([chars])    移除左边的字符chars
  3. str. rstrip([chars])    移除右边的字符chars
  • 注意:如果不指定chars或者指定为None,则默认移除空白(空格、制表符、换行符)。
  • 唯一需要注意的是,chars可以是多个字符序列。在移除时,只要是这个序列中的字符,都会被移除。
str = " hello# "
print(str.strip())
print(str.lstrip("h "))
print(str.rstrip("#o "))

运行结果:
hello#
ello# 
 hell
  • 字符串的拆分与组合(都是用来分割字符串,并生成一个列表
  1. str. split (sep=None, maxsplit=-1)     split()根据sep对S进行分割,maxspt于指定分割次数,如果不指定maxsplit或者给定值为"-1", 则会从左向右搜索并且每遇到sep- 次就分割直到搜索完字符串。如果不指定sep或者指定为None,则改变分割算法:以空格为分隔符,且将连续的空白压缩为一一个空格。
  2. str. rsplit (sep=None, maxsplit=-1)    rsplit()和split()是一 样的, 只不过是从右边向左边搜索。
  3. str. splitlines ([keepends=True])      splitlines()用来专门用来分割换行符。虽然它有点像split("|n’)或split(\r\n"), 但它们有些区别。 splitlines()中可以指定各种换行符,常见的是\n、\r、\rn。 如果指定keepends为True, 则保留所有的换行符。
  4. str.join 用于将序列中的元素以指定的字符连接生成一个新的字符串。
  5. S. partition(sep)
  6. S. rpartition (sep)   搜索字符串S中的子串sep,并从sep处对S进行分割, 最后返回一个包含3元素的元组, sep左边的部分是元组的第一个元素, sep自身是元组的二个元素,sep右边是元组的第三个元素。partition(sep)从左边第一 个sep进行分割,rpartition(sep)从右边第一 个sep进行分割。如果搜索不到sep,则返回的3元素元组中,有两个元素为空。partition()是后两个元素为空,rpartition()是前两个元素为空。
str = "hello#world#I#love#you!"
print(str.split("#"))
print(str.rsplit("#",2))
print(str.splitlines(True))
print(str.partition("#"))
print(str.rpartition("#"))

运行结果:
['hello', 'world', 'I', 'love', 'you!']
['hello#world#I', 'love', 'you!']
['hello#world#I#love#you!']
('hello', '#', 'world#I#love#you!')
('hello#world#I#love', '#', 'you!')

s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))

运行结果:
r-u-n-o-o-b
runoob
  • 字符串的替换
  1. str. replace(old, new[, count])      将字符串中的子串old替换为new字符串,如果给定count, 则表示只替换前count个old子串。 如果S中搜索不到子串old,则无法替换,直接返回字符串S(不创建新字符串对象)。
  2. str. translate (table)
  3. str. maketrans(x[, y[, z]]) 注:Python3.4 已经没有 string.maketrans() 了,取而代之的是内建函数: bytearray.maketrans()、bytes.maketrans()、str.maketrans() 。
  • str.maketrans()生成一一个字符一一 映射的table,然后使用translate(table)对字符串S中的每个字符进行映射。
  • translate()实现的功能和Linux中的tr命令是类似的。
  • 注意,maketrans(x[, y[, z1])中的x和y都是字符串,且长度必须相等。
  • 如果maketrans(x[, y[, z])给定了第三个参数z,则这个参数字符串中的每个字符都会被映射为None。
str = "hello#world#I#love#you!"
print(str.replace("#", "-",3))
运行结果:hello-world-I-love#you!
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)   # 制作翻译表
 
str = "this is string example....wow!!!"
print (str.translate(trantab))

运行结果:th3s 3s str3ng 2x1mpl2....w4w!!!
  • 字符串的测试与查找
  1. str. startswith (prefix[, start[, end]])
  2. str. endswith(suffix[, start[, end]])
  • endswith()检查字符串str是否以suffix结尾,返回布尔值的True和False。
  • suffix,prefix可 以是一一个元组(tuple)。可以指定起始start和结尾end的搜索边界。
  • 同理startswith()用来判断字符串str是否是以prefix开头。
  • 举例:
  • 1.suffix是普通的字符串时
  • 2.suffix是元组tuple时,只要tuple中任意一个 元素满足endswith的条件,就返回True。
str = "hello"
print(str.startswith("he"))
print(str.endswith("l"))

运行结果:
True
False
  1. str. find(sub[, start[, end]])
  2. str. rfind(sub[, start[, end]])
  3. str. index(sub[, start[, end]])
  4. str. rindex (sub[, start[, end]])
  5. str.conut() 统计子串出现的次数
  • find()搜索 字符串S中是否包含子串sub,如果包含,则返回sub的索引位置,否则返回"-1"。可以指定起始start和结束end的搜索位置。
  • rfind()则是返回搜索到的最右边子串的位置,如果只搜索到一个或没有搜索到子串,则和find()是等价的。同理rindex()。
  • index()和find()一样,唯一不同点在于当找不到子串时,抛出ValueError错误。
str = "hello"
print(str.find("l"))
print(str.rfind("l"))
print(str.index("l"))
print(str.rindex("l"))
print(str.count("l"))

运行结果:
2
3
2
3
2

 

  • 字符串的函数
  1. ord(c)  返回一个字符串的Unicode值
  2. chr(i)   返回i这个值所对应的字符
  3. hex(i) 将整数转换为十六进制的字符串
  4. oct(i) 将整数转换为八进制的字符串
  5. bin(i) 将整数转换为二进制的字符串
  6. str(obj="")  对象转换为字符串
  • 编码解码
  1. decode() 方法以指定的编码格式解码 bytes 对象。默认编码为 'utf-8'。
  2. encode() 方法以指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案。
str = "菜鸟教程";
str_utf8 = str.encode("UTF-8")
str_gbk = str.encode("GBK")
 
print(str)
 
print("UTF-8 编码:", str_utf8)
print("GBK 编码:", str_gbk)
 
print("UTF-8 解码:", str_utf8.decode('UTF-8','strict'))
print("GBK 解码:", str_gbk.decode('GBK','strict'))

运行结果:
菜鸟教程
UTF-8 编码: b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b'
GBK 编码: b'\xb2\xcb\xc4\xf1\xbd\xcc\xb3\xcc'
UTF-8 解码: 菜鸟教程
GBK 解码: 菜鸟教程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值