#!/usr/bin/env python
#Python 3.7.0 字符串常用方法
__author__ = "lrtao2010"
#capitalize 将字符串的首字符改为大写
# a = "lrtao"
# v = a.capitalize()
# print(v)
# Lrtao
#casefold 将字符串所有字符改为小写,功能强大
# a = "LrTao"
# v = a.casefold()
# print(v)
# lrtao
#lower 将字符串所有字符改为小写
# a = "LrTao"
# v = a.lower()
# print(v)
# lrtao
#upper 将字符全部转成大写
# a = "LrTao"
# v = a.upper()
# print(v)
# LRTAO
#center(self, width, fillchar=None) 内容居中,width:总长度(当width<len(s)时没有效果);
# fillchar:空白处填充内容,默认无
# a = "lrtao"
# v = a.center(20,'*')
# print(v)
# *******lrtao********
#ljust(self, width: int, fillchar: str = ...)内容左对齐,右侧填充,不指定默认空白
# a = "lrtao"
# v1 = a.ljust(20,'*')
# v2 = a.ljust(20)
# print(v1)
# print(v2)
# lrtao***************
# lrtao
#rjust(self, width: int, fillchar: str = ...)内容右对齐,左侧填充,不指定默认空白
# a = "lrtao"
# v1 = a.rjust(20,'*')
# v2 = a.rjust(20)
# print(v1)
# print(v2)
# ***************lrtao
# lrtao
# zfill(self, width: int) z指zero,用0将字符填充到指定长度(左侧填充)
# a = "test"
# v = a.zfill(20)
# print(v)
# 0000000000000000test
# a = "test"
# v1 = a.rjust(20,'0')
# print(v1)
# 0000000000000000test
#count(self, sub, start=None, end=None) 统计子序列在字符串里出现的次数,包括start,不包括end
# a = "lilelili"
# v1 = a.count('li')
# v2 = a.count('li',1)
# v3 = a.count('li',1,6)
# print(v1,v2,v3)
# 3 2 1
#encode(encoding='utf-8',errors='strict') 以encoding指定的编码格式对字符串进行编码
# a = "lilei"
# v = a.encode(encoding='utf-8')
# print(v)
# b'lilei'
#
#endswith(self, suffix, start=None, end=None)是否以指定字符串结束,返回值为布尔值
# a = "hello"
# v1 = a.endswith('o')
# v2 = a.endswith('l')
# v3 = a.endswith('lo')
# v4 = a.endswith('e',0,2)
# print(v1,v2,v3,v4)
# True False True True
#startswith(self, prefix: Union[str, Tuple[str, ...]], start: Optional[int] = ...,end: Optional[int] = ...)
#是否以指定字符串开始,返回值为布尔值
# a = "hello"
# v1 = a.startswith('h')
# v2 = a.startswith('e')
# v3 = a.startswith('he')
# v4 = a.startswith('e',1,3)
#
# print(v1,v2,v3,v4)
# True False True True
#expandtabs
# 按指定的宽度对字符串进行分割,遇到tab字符(\t)转化为空格,默认以8个字符位置分割
#可用作格式化
# a = '1234\t56\t7890\t0\t123'
# v = a.expandtabs(6)
# u_e_p = 'username\temail\tpasswd\nlrtao2010\tlrtao2010@163.com\t123456\nlrtao\tlrtao@163.com\t123'
# v1 = u_e_p.expandtabs(30)
# print(v)
# print(v1)
# 1234 56 7890 0 123
# username email passwd
# lrtao2010 lrtao2010@163.com 123456
# lrtao lrtao@163.com 123
# find(self, sub, start=None, end=None) 返回首次找到子序列的位置,如果没找到,返回 -1
# a = 'lilei'
# v1 = a.find('l')
# v2 = a.find('l',2)
# v3 = a.find('lei',2,4)
# print(v1,v2,v3)
# 0 2 -1
#index(self, sub, start=None, end=None)返回首次找到子序列的位置,如果没找到程序会报异常
# a = 'lilei'
# v = a.index('ll')
# print(v)
# Traceback (most recent call last):
# v = a.index('ll')
# ValueError: substring not found
#rfind(self, sub: str, __start: Optional[int] = ..., __end: Optional[int] = ...)
#返回指定子串的最大索引,如果没找到则返回-1,可以指定要开始和结束位置。
# a = 'lilililili'
# v1 = a.rfind('li')
# v2 = a.rfind('li',9)
# v3 = a.rfind('li',2,4)
# print(v1,v2,v3)
# 8 -1 2
#rindex(self, sub: str, __start: Optional[int] = ..., __end: Optional[int] = ...)
#返回指定子串的最大索引,如果没找到则抛异常,可以指定要开始和结束位置。
# a = 'lilililili'
# v1 = a.rindex('li')
# v2 = a.rindex('li',9)
# v3 = a.rindex('li',2,4)
# print(v1)
# print(v2)
# print(v3)
# v2 = a.rindex('li',9)
# ValueError: substring not found
#
# Process finished with exit code 1
#format 字符串格式化
# a = 'hello ,{name}!hello ,{name2} !'
# v = a.format(name='lilei',name2='tom')
# print(v)
# hello ,lilei!hello ,tom !
# a = 'hello,{0}! hello,{1}!'
# v = a.format('lilei','tom')
# print(v)
# hello,lilei! hello,tom!
#format_map(self, mapping) 和format相似,参数为字典形式
# a = 'hello ,{name}!hello ,{name2} !'
# v = a.format_map({'name2':'lilei','name':'tom'})
# print(v)
# hello ,tom!hello ,lilei !
#isalnum 是否只包含字母或数字,返回值为布尔值
# a = 'lsL123'
# b = 'ls'
# c = 'LS'
# d = '123'
# e = 'ls@'
# v1 = a.isalnum()
# v2 = b.isalnum()
# v3 = c.isalnum()
# v4 = d.isalnum()
# v5 = e.isalnum()
# print(v1,v2,v3,v4,v5)
# True True True True False
#isalpha 字符串是否全部是字母
# a = 'lsL123'
# b = 'ls'
# c = 'LS'
# d = 'Ls'
# e = 'ls@'
# v1 = a.isalpha()
# v2 = b.isalpha()
# v3 = c.isalpha()
# v4 = d.isalpha()
# v5 = e.isalpha()
# print(v1,v2,v3,v4,v5)
# False True True True False
#isascii Return True if all characters in the string are ASCII, False otherwise.
# a = '12ls er$%^&*()'
# b = '中'
# v1 = a.isascii()
# v2 = b.isascii()
# print(v1,v2)
# True False
#isdecimal 字符串是否是十进制字符串
# a = '1234567890'
# b = 'A0'
# v1 = a.isdecimal()
# v2 = b.isdecimal()
# print(v1,v2)
# True False
#isdigit 如果字符串是数字字符串,则返回True,否则返回False。
# isdecimal() 如果字符串是数字字符串,则返回True,否则返回False。
#isnumeric 如果字符串是数字字符串,则返回True,否则返回False
# num = "一"
# v1 = num.isdigit()
# v2 = num.isdecimal()
# v3 = num.isnumeric()
# print(v1,v2,v3)
# False False True
# num = "Ⅰ" #罗马数字1
# v1 = num.isdigit()
# v2 = num.isdecimal()
# v3 = num.isnumeric()
# print(v1,v2,v3)
# False False True
# num = "1"
# v1 = num.isdigit()
# v2 = num.isdecimal()
# v3 = num.isnumeric()
# print(v1,v2,v3)
# True True True
# isdigit()
# True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
# False: 汉字数字
# Error: 无
# isdecimal()
# True: Unicode数字,全角数字(双字节)
# False: 罗马数字,汉字数字
# Error: byte数字(单字节)
# isnumeric()
# True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
# False: 无
# Error: byte数字(单字节)
#isidentifier 判断字符串是否包含python的保留字
# v1 = 'def'.isidentifier()
# v2 = 'aaa'.isdecimal()
# print(v1,v2)
# True False
#islower 字符串中不能出现大写字母,并且至少有一个小写字母
# a = 'ls12#3'
# b = 'Ls'
# c = '1234s'
# d = 'LS'
# v1 = a.islower()
# v2 = b.islower()
# v3 = c.islower()
# v4 = d.islower()
# print(v1,v2,v3,v4)
# True False True False
#isprintable 检查字符串中是否包含不可安原型显示的内容
# a = 'test'
# b = 't\test' #\t在print时不能显示为\t
# c = 'test\n' #\n在print时不能显示为\n
# v1 = a.isprintable()
# v2 = b.isprintable()
# v3 = c.isprintable()
# print(v1,v2,v3)
# True False False
#isspace 判断字符串是否全部是空格
# a = ''
# b = ' '
# c = 'a b'
# v1 = a.isspace()
# v2 = b.isspace()
# v3 = c.isspace()
# print(v1,v2,v3)
# False True False
#title 标题格式(可以理解为单词首字母大写,其它字符小写)
# a = 'this is title'
# v = a.title()
# print(v)
# This Is Title
#istitle 判断是否是标题格式(可以理解为首字母是否大写)
# a = "this is title"
# b = "This is title"
# c = "This Is title"
# d = "This Is Title"
# v1 = a.istitle()
# v2 = b.istitle()
# v3 = c.istitle()
# v4 = d.istitle()
# print(v1,v2,v3,v4)
# False False False True
#isupper 判断字母是否全部是大写
# a = 'lsL123'
# b = 'LSF123'
# c = 'LSF'
# d = 'LS F'
# v1 = a.isupper()
# v2 = b.isupper()
# v3 = c.isupper()
# v4 = d.isupper()
# print(v1,v2,v3,v4)
# False True True True
#join(self, iterable: Iterable[str])返回一个用指定分隔符分隔的字,
# 或者是将指定字符加入到另一个字符中。
# a = 'iamtom'
# v1 = '.'.join(a)
# v2 = '#'.join(a)
# print(v1)
# print(v2)
# i.a.m.t.o.m
# i#a#m#t#o#m
#partition(self, sep: str) 按照指定的字符将字符串分为前中后三部分,从左侧开始
# a = "iamtom"
# v1 = a.partition("i")
# v2 = a.partition('am')
# v3 = a.partition('om')
# v4 = a.partition('som')
# print(v1)
# print(v2)
# print(v3)
# print(v4)
# ('', 'i', 'amtom')
# ('i', 'am', 'tom')
# ('iamt', 'om', '')
# ('iamtom', '', '')
#rpartition(self, sep: str) 与partition一样,但是从右边开始
# a = "iamtom"
# v1 = a.rpartition("i")
# v2 = a.rpartition('am')
# v3 = a.rpartition('tom')
# v4 = a.rpartition('som')
# print(v1)
# print(v2)
# print(v3)
# print(v4)
# ('', 'i', 'amtom')
# ('i', 'am', 'tom')
# ('iam', 'tom', '')
# ('', '', 'iamtom')
#replace(self, old: str, new: str, count: int = ...) 替换字符,不指定次数默认全部替换
# a = 'iamtomtomtom'
# v1 = a.replace('m','i')
# v2 = a.replace('m','i',1)
# print(a)
# print(v1)
# print(v2)
# iamtomtomtom
# iaitoitoitoi
# iaitomtomtom
#split(self, sep: Optional[str] = ..., maxsplit: int = ...)
#按指定字符串从左侧开始进行切割,可以指定切割次数(不指定全部切割)
# a = 'iamtomtom'
# v1 = a.split('m')
# v2 = a.split('m',2)
# print(v1)
# print(v2)
# ['ia', 'to', 'to', '']
# ['ia', 'to', 'tom']
#rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...)
#按指定字符串从右侧开始进行切割,可以指定切割次数(不指定全部切割)
# a = 'iamtomtom'
# v1 = a.rsplit('m')
# v2 = a.rsplit('m',2)
# print(v1)
# print(v2)
# ['ia', 'to', 'to', '']
# ['iamto', 'to', '']
#strip(self, chars: Optional[str] = ...)
#移除两侧(最外侧)指定字符串,默认移除空格,以指定多个字符
# a = ' i am tom m'
# v1 = a.strip()
# v2 = a.strip('m')
# v3 = a.strip('ap')
# v4 = a.strip('am')
# print(v1)
# print(v2)
# print(v3)
# print(v4)
# i am tom m
# i am tom
# i am tom m
# i am tom
#rstrip(self, chars: Optional[str] = ...)
#移除右侧指定字符
# a = ' i am tom m'
# v1 = a.rstrip()
# v2 = a.rstrip('m')
# v3 = a.rstrip('ap')
# v4 = a.rstrip('am')
# print(v1)
# print(v2)
# print(v3)
# print(v4)
# i am tom m
# i am tom
# i am tom m
# i am tom
#lstrip 移除左侧空白
# a = ' i am tom m '
# v1 = a.lstrip()
# print(v1)
# i am tom m
#splitlines(self, keepends: bool = ...)
#按换行符\n切割,如果没指定keepends=True,则会将其从结果中移除
# a = "this is test1\n this is test2"
# v1 = a.splitlines(keepends=True)
# v2 = a.splitlines()
# print(v1)
# print(v2)
# ['this is test1\n', ' this is test2']
# ['this is test1', ' this is test2']
#swapcase 大小写转换
# a = 'This Is Test 01'
# v = a.swapcase()
# print(v)
# tHIS iS tEST 01
#translate(self, table: Optional[bytes], delete: bytes = ...)
#translate() 方法根据参数table给出的表(包含 256 个字符)转换字符串的字符,
# 要过滤掉的字符放到 deletechars 参数中
# intab = "aeiou"
# outtab = "12345"
# trantab = str.maketrans(intab, outtab) # 制作翻译表
# str = "this is string example....wow!!!"
# print(str.translate(trantab))
# th3s 3s str3ng 2x1mpl2....w4w!!!
# 制作翻译表
# bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
#
# # 转换为大写,并删除字母o
# print(b'runoob'.translate(bytes_tabtrans, b'o'))
# b'RUNB'
################################################################################################
#字符串也有索引的概念
# a = 'index'
# v1 = a[0]
# v2 = a[3]
# v3 = a[-1]
# v4 = a[0:4]
# print(v1,v2,v3,v4)
# i e x inde
#len()
#
# a = 'abc'
# b = '测试'
# v1 = len(a)
# v2 = len(b)
# print(v1,v2)
# 3 2
#对字符串可以直接使用for、while 循环
# a = '测试'
#
# for i in a:
# print(i)
# 测
# 试
#
# index = 0
# while index < len(a):
# print(a[index])
# index += 1
# 测
# 试