.. _python_string: 字符串 ###### 常用内置方法 ============ 大小写:: capitalize() 将字符串的第一个字符转换为大写。 lower() 转换字符串中所有大写字符为小写。 upper() 转换字符串中的小写字母为大写。 swapcase() 将字符串中大写转换为小写,小写转换为大写。 查找相关:: count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数 endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回 True,否则返回 False。 如果 beg 和 end 指定值,则在指定范围内检查。 startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串 substr 开头,如果是,返回 True,否则返回 False。 如果 beg 和 end 指定值,则在指定范围内检查。 find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end,则检查是否包含在指定范围内, 如果包含,返回开始的索引值,否则返回 -1。 rfind(str, beg=0,end=len(string)) 类似于 find() 函数,不过是从右边开始查找。 isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。 增加/去除指定字符:: ljust(width[, fillchar]) 返回一个原字符串左对齐,并使用fillchar(默认空格)填充至长度width的新字符串。 rjust(width[, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串。 lstrip([chars]) 截掉字符串左边的空格或指定字符。 rstrip([chars]) 删除字符串末尾的空格或指定字符。 strip([chars]) 在字符串上执行lstrip()和rstrip()。 分隔/替换:: partition(sub) 找到子字符串sub,把字符串分为一个三元组(pre_sub,sub,fol_sub), 如果字符串中不包含sub则返回('原字符串','','')。 rpartition(sub) 类似于partition()方法,不过是从右边开始查找。 replace(old, new [, max]) 把 将字符串中的old替换成new,如果max指定,则替换不超过max次。 split(str="", num) 不带参数默认是以空格为分隔符切片字符串, 如果num参数有设置,则仅分隔num个子字符串,返回切片后的子字符串拼接的列表。 splitlines([keepends]) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表, 如果参数keepends为 False,不包含换行符,如果为 True,则保留换行符。 maketrans(intab, outtab) 创建字符映射的转换表,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 translate(table, deletechars="") 根据参数table给出的表,转换字符串的字符,要过滤掉的字符放到deletechars参数中。 字符串格式化 ============ format 格式化函数:: str8 = "{0} Love {1}".format('I', 'XXX') # 位置参数 # I Love XXX str8 = "{a} Love {b}".format(b='I', a='XXX') # 关键字参数 # XXX Love I Python 字符串格式化符号:: 符号 描述 %c 格式化字符及其ASCII码 %s 格式化字符串,用str()方法处理对象 %r 格式化字符串,用rper()方法处理对象 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大写) %f 格式化浮点数字,可指定小数点后的精度 %e 用科学计数法格式化浮点数 %E 作用同%e,用科学计数法格式化浮点数 %g 根据值的大小决定使用%f或%e %G 作用同%g,根据值的大小决定使用%f或%E 实例:: print('%c' % 97) # a print('%c %c %c' % (97, 98, 99)) # a b c print('%d + %d = %d' % (4, 5, 9)) # 4 + 5 = 9 print("我叫 %s 今年 %d 岁!" % ('小明', 10)) # 我叫 小明 今年 10 岁! print('%o' % 10) # 12 print('%x' % 10) # a print('%X' % 10) # A print('%f' % 27.658) # 27.658000 print('%e' % 27.658) # 2.765800e+01 print('%E' % 27.658) # 2.765800E+01 print('%g' % 27.658) # 27.658 text = "I am %d years old." % 22 print("I said: %s." % text) # I said: I am 22 years old.. print("I said: %r." % text) # I said: 'I am 22 years old.' 格式化操作符辅助指令:: 符号 功能 m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) - 用作左对齐 + 在正数前面显示加号( + ) # 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') 0 显示的数字前面填充'0'而不是默认的空格 实例:: print('%5.1f' % 27.658) # ' 27.7' print('%.2e' % 27.658) # 2.77e+01 print('%10d' % 10) # ' 10' print('%-10d' % 10) # '10 ' print('%+d' % 10) # +10 print('%#o' % 10) # 0o12 print('%#x' % 108) # 0x6c print('%010d' % 5) # 0000000005 字符串提取 ========== 提取方法如下:: 用法 说明 [ : ] 提取全部 [start : ] 提取 start 至結束 [ : end] 提取开头到 end - 1 [start : end] 提取 start 至 end - 1 [start : end : step] 提取 start 至 end - 1,间隔为step (step为负的时候则从右边开始,start与end需反过来摆放) 实例1:: str = '12345678' print str[0:1] >> 1 # 输出str位置0开始到位置1以前的字符 print str[1:6] >> 23456 # 输出str位置1开始到位置6以前的字符 num = 18 str = '0000' + str(num)# 合并字符串 print str[-5:] # 输出字符串右5位 >> 00018 实例2-索引:: a = 'bcd' print(a[0]) # 'b' print(a[-1]) # 'd' 实例3-反序排列:: a = 'abcde' print(a[::-1]) #'edcba' 可以变成反序排列 print(a[-2:0:-1]) #'dcb' 字符串替换-replace ================== :: str = 'akakak' str = str.replace('k',' 8') # 将字符串里的k全部替换为8 print str >> 'a8a8a8'# 输出结果 实例1:: name = 'Henny' #name[0] = 'P' #错误!!!!!! a = name.replace('H', 'P') #'Penny' print(a) print('P' + name[1:]) #'Penny' 字符串查找-find =============== :: str = 'a,hello' print str.find('hello') # 在字符串str里查找字符串hello >> 2# 输出结果 获取字符串长度:: a = 'abc' print(len(a)) 检查开头結束字串是否为特定字串,返回True或False:: poem = 'abcdef' print(poem.startswith('ab')) # True print(poem.endswith('eef')) # False 查搜索索引, 查搜索串个数:: poem = 'abcdefbcd' print(poem.find('bc')) # 1(第一次出现搜索字串的index) print(poem.rfind('bc')) # 6(最后一次出现搜索字串的index) print(poem.count('bc')) # 2(查询字串出现次数) 查询字符串中是否都是字母或数字,返回True或False:: poem = 'abc@def' print(poem.isalnum()) # False poem = 'abcdef23' print(poem.isalnum()) # True 字符分割-split ============== 实例1:: str = 'a,b,c,d' strlist = str.split(',') # 用逗号分割str字符串,并保存到列表 实例2:: todos = 'get gloves,get mask,give cat vitamins,call ambulance' print(todos.split(',')) print(todos.split()) # 默认会切割\n(换行) 、 \t(tab)与空格三种 字符合并-join ============= 实例1:: sep=":" items=sep.join(strlist) print items # 'a:b:c:d' 实例2:: crypto_list = ['Yeti', 'Bigfoot', 'Loch Ness Monster'] print(', '.join(crypto_list)) 建立重复字符串:: print('a' * 5) # 'aaaaa' 其他 ==== 字符串的方法:: name = 'Swaroop' if name.startswith('Swa'): print('Yes, the string starts with "Swa"') if 'a' in name: print('Yes, it contains the string "a"') if name.find('war') != -1: #得到字符串里含有子字符串对应的位置,没有为-1 print('Yes, it contains the string "war"') delimiter = '_*_' mylist = ['Brazil', 'Russia', 'India', 'China'] print delimiter.join(mylist) # Brazil_*_Russia_*_India_*_China 方便的string內建function:: setup = 'a duck goes into a bar...' print(setup.strip('.')) #刪除結尾特定符号 'a duck goes into a bar' print(setup.capitalize()) #字串第一個字符大写 'A duck goes into a bar...' print(setup.title()) #每个单词的首字母大写'A Duck Goes Into A Bar...' print(setup.upper()) #全部大写 'A DUCK GOES INTO A BAR...' print(setup.lower()) #全部小写'a duck goes into a bar...' print(setup.swapcase()) #大小写交换 'A DUCK GOES INTO A BAR...' print(setup.center(30)) #将字符串中心移动至30个字符的中间 ' a duck goes into a bar... ' print(setup.ljust(30)) #左对齐 'a duck goes into a bar... ' print(setup.rjust(30)) #右对齐 ' a duck goes into a bar...' print(setup.replace('duck', 'marmoset')) #'a marmoset goes into a bar...' print(setup.replace('a ', 'a famous ', 100)) #只替换前100个'a ' 说明:: 单引号指示字符串,所有的空白,即空格和制表符都照原样保留 双引号中的字符串与单引号中的字符串的使用完全相同 三引号,你可以指示一个多行的字符串;在三引号中自由的使用单引号和双引号 自然字符串——不需要如转义符那样的特别处理的字符串: r"Newlines are indicated by \n" # '\\1'或r'\1'一样 Unicode字符串——国际文本的标准方法(要在字符串前加上前缀u或U):: u"This is a Unicode string."