字符串基本操作
(1) 字符串+字符串
(2)字符串*数字
(3)字符串+str(其他)
# -*- coding:utf-8 -*-
print ("test1")
name1="alice"
name2="bob"
name_new=name1+name2
print name_new
print "\n","test2" #字符串直接相加相乘可以。
"alice"+"bob"
print "alice"+"bob"
print "\n","test3" #字符串*数字可以,但字符串*字符串不行
"alice"*5
print "alice"*5
print "\n","test4"
"alice"+"1"
print "alice"+"1"
#print "alice"+1 #字符串没法和数字+
print "\n","test5"
"alice"+str(2)
print "alice"+str(2)
print "\n","test6"
input1=raw_input("please enter a num>>>")
input2=raw_input("please enter a txt>>>")
print "alice"+"_"+input1+"_"+input2
print 1+int(input1)
# print 1+input1 会报错,raw_input()返回的一定是字符串
字符串相关全局函数
(1) 转换函数 str() int() float()
print "\n","test7" #字符串转换,理论上啥都可以
print str("aad88912l_1")
print "\n","test8" #int()转换,只能转数字,或是1种特殊字符串:整数字符串,其他字符串:字母字符串,小数字符串都不可以
print int("99")
print int(99.99)
#print int("99.99")
#print int("a")
print "\n","test9" #float()转换,可以转数字,或2类特殊字符串:整数字符串 或 小数字符串,但不能转含字母的字符串。因为本质上整数也是小数。
print float(99)
print float("99")
print float("99.99")
#print float("a")
(2)del string
del string # 删除string 对象,删除后不能再访问这个 变量名和对象
del string[0] # 字符串不能被改变,不能删
>>> strB=strA
>>> strB
'abcdefghijk'
>>> del strB
>>> strB
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
strB
NameError: name 'strB' is not defined
>>> del strA[0]
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
del strA[0]
TypeError: 'str' object doesn't support item deletion
>>>
string的嵌套
虽然string 嵌套没什么意义,但好像这样也算嵌套的。
>>> strC="[1,3,4]aabnb{8,9}"
>>> strC
'[1,3,4]aabnb{8,9}'
>>> strD="abc"'12345'
>>> strD
'abc12345'
字符串相关方法
(2)string. len()
>>> strA="abcdefghijk"
>>> strA[0]
'a'
>>> strA[:]
'abcdefghijk'
>>> len(strA)
11
(3) string.find(str_compare,[beg=0],[end=len(string)])
必选参数:必须带查找的 对比内容
可选参数:带2个可选参数:有默认值,不填即用默认值,默认在0-len之间查找
返回:如果匹配成功,返回字符串开始的位置index,
错误报告: 如果查找不到,不报错,而是返回-1
>>> strA.find("a")
0
>>> strA.find("cde")
2
>>> strA.find("cde",5)
-1
(4) 字符串 连接/分隔 lsit 的每个单个元素,str_connect.join(obj) #obj是被连接分隔的对象
参数: obj可以是list 或tuple,set dict
输出:输出新的string
>>> strA="abcdefg"
>>> strA.join("_") #错误写法,需要用 连接符作为对象,引用.join()方法
'_'
>>> strA
'abcdefg'
>>> listA=list(strA)
>>> listA.join("_") #list本身更没有join()这种方法
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
listA.join("_")
AttributeError: 'list' object has no attribute 'join'
>>> listA
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> "_".join(listA) #虽然结果OK,但这样写不好
'a_b_c_d_e_f_g'
>>> str_connect="_" #正确写法
>>> str_connect.join(listA)
'a_b_c_d_e_f_g'
>>>
对列表有要求,列表里的元素,得是 字符串类型的,不能是int等
>>> strB="gogogo"
>>> strB.join([1,2,3])
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
strB.join([1,2,3])
TypeError: sequence item 0: expected str instance, int found
>>> strB.join(["a","b","c"])
'agogogobgogogoc'
>>> strB.join(["1","2","3"])
'1gogogo2gogogo3'
>>>
可以用于list tuple set
但是如果用于dict,只会连接key
>>> strB.join(["1","2","3"])
'1gogogo2gogogo3'
>>> strB.join(("1","2","3"))
'1gogogo2gogogo3'
>>> strB.join({"1","2","3"})
'3gogogo1gogogo2'
>>> strB.join({"1":"a","2":"b","3":"c"})
'1gogogo2gogogo3'
>>> strB.join({"a":"1","b":"2","c":"3"})
'agogogobgogogoc'
(5)string.copy() ? 错误,没有这个方法
因为string不可修改,所以不存在浅复制这个问题?
果然是,试验了下,tuple ,string 都没有 .copy()
而 list set dict都可以
>>> tupleB=tupleA.copy()
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
tupleB=tupleA.copy()
AttributeError: 'tuple' object has no attribute 'copy'
(6) 大小写转换
>>> strA="abCD"
>>> strB=strA.lower()
>>> print(strA,strB)
abCD abcd
>>> strC=strA.upper()
>>> print(strA,strB,strC)
abCD abcd ABCD
>>> strD=strA.swapcase()
>>> print(strA,strB,strC,strD)
abCD abcd ABCD ABcd
(7) 替换 String.replace(oldkey,newkey[,maxcount])
必选参数:更换前的部分str ,更换后的部分str
可选参数:替换次数,默认是全部
返回值:直接会有返回值
>>> strA="ababababCDababab"
>>> strA.replace("ab","ef")
'efefefefCDefefef'
>>> strA="ababababCDababab"
>>> strA.replace("ab","ef",1)
'efabababCDababab'
(8)分割字符串(不只是首尾!)
String.split( [str] [,maxcount])
可选参数:str如果没有填,默认为空格
可选参数:maxcount 如果没有填,默认为所有数量
输出内容:str切割后会自动输出为 list
>>> strA="ab/ab/ab CD ab/ab/ab"
>>> strA.split()
['ab/ab/ab', 'CD', 'ab/ab/ab']
>>> strA=" ab/ab/ab CD ab/ab/ab "
>>> strA.split()
['ab/ab/ab', 'CD', 'ab/ab/ab']
>>> strA=" ab/ab/ab CD ab/ab/ab "
>>> strA.split("/",2)
[' ab', 'ab', 'ab CD ab/ab/ab ']
>>>
(9) 删除首尾的内容 String.strip([char or chars])
可选参数1: char 删首尾的单个字符
可选参数2: chars 删首尾的str里的每个字符 挨个删 chars!(松散,无序)=str(有序的!)
并且我推测是每次字符串变化了,都会轮流扫一下每个字母,每次都删掉
比如"acb" 会先扫 "a","b","c",字符串如果删了内容,继续再顺序扫"a","b","c",
返回:字符串
>>> strA="acb/ab/ab CD ab/ab/acb"
>>> strA.strip("a")
'cb/ab/ab CD ab/ab/acb'
>>> strA="acb/ab/ab CD ab/ab/acb"
>>> strA.strip("ac")
'b/ab/ab CD ab/ab/acb'
>>> strA="acb/ab/ab CD ab/ab/acb"
>>> strA.strip("acb") # 这个居然能首尾都删掉
'/ab/ab CD ab/ab/'
>>> strA="acb/ab/ab CD ab/ab/acb"
>>> strA.strip("bca") # 这个也是能首尾都删掉
'/ab/ab CD ab/ab/'
(10) 生存一个ASCII码-table? str.maketran (str1,str2 )----看起来这是一个特殊ascii TABLE 不是字典
必选参数:一个key的字符串,一个value的字符串?要求两者长度相等!!!
指定一个对照表,将字符串中符合对照表中其中一行字符更换成另一行中的字符。
注意,这个方法是基于 系统公有变量str的方法,str.maketrans()
>>> strA1="abc"
>>> strA2="#$%"
>>> strA3=str.maketrans(strA1,strA2)
>>> strA3
{97: 35, 98: 36, 99: 37}
直接可用str.maketrans()
>>> str.maketrans("go","up")
{103: 117, 111: 112}
>>> str.maketrans("go","fly")
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
str.maketrans("go","fly")
ValueError: the first two maketrans arguments must have equal length
>>>
(11) 翻译字符串 String.translate (str_table [,chars] )
必选参数:str_table:可以认为是一个密码解码表,是一个表格?
可选参数:要替换的字符
指定一个对照表,将字符串中符合对照表中其中一行字符更换成另一行中的字符。
>>> strA1="abc"
>>> strA2="#$%"
>>> strA3=str.maketrans(strA1,strA2)
>>> strA3
{97: 35, 98: 36, 99: 37}
>>> strB1="abccabaaccaasHHHH"
>>> strB2=strB1.translate(strA3)
>>> strB2
'#$%%#$##%%##sHHHH'
自己生造字典作为table好像不行
>>> dictA={"aaa":1,"bbb":2}
>>> strC="HAGASAaaanhaasadabbbsasqasaaaabaasbbbjhhjasGH"
>>> strC.translate(dictA)
'HAGASAaaanhaasadabbbsasqasaaaabaasbbbjhhjasGH'
>>> strD=strC.translate(dictA)
>>> strD
'HAGASAaaanhaasadabbbsasqasaaaabaasbbbjhhjasGH'
>>> dictB={"a":1,"b":2}
>>> strE=strA.translate(dictB)
>>> strE
'acb/ab/ab CD ab/ab/acb'
>>> strE=strC.translate(dictB)
>>> strE
'HAGASAaaanhaasadabbbsasqasaaaabaasbbbjhhjasGH'
>>> strA="AaBbCcDdAABBCCDDaabbccdd"
>>> strB=strA.translate(dictB)
>>> strB
'AaBbCcDdAABBCCDDaabbccdd'
>>>
(12) 字符串的 == in is
>>> strA="A"
>>> strB="A"
>>> strA==strB
True
>>> strA in strB
True
>>> strA is strB
True
>>>
字符串公共函数
str()
#重新变成str很难,本身 str---list(str)----str(list(str)) 本身就会无法转回去
以r开头的(非转义)原始字符串
以r或R开头的python中的字符串表示(非转义的)原始字符串
python里面的字符,如果开头处有个r,比如:
(r’^time/plus/\d{1,2}/$’, hours_ahead)
说明字符串r"XXX"中的XXX是普通字符。
有普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n"表示换行,"\t"表示Tab等。而如果是以r开头,那么说明后面的字符,都是普通的字符了,即如果是“\n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。
以r开头的字符,常用于正则表达式,对应着re模块。
关于re模块,详情自己google搜索“python re”。
原始字符串操作符(r/R),能方便处理反斜杠:
f = open(r'C:\Program Files\Adobe\Reader 9.0\Setup Files\setup.ini','r')
for i in f:
print i
f.close()
以u或U开头的字符串表示unicode字符串
Unicode是书写国际文本的标准方法。如果你想要用非英语写文本,那么你需要有一个支持Unicode的编辑器。
类似地,Python允许你处理Unicode文本——你只需要在字符串前加上前缀u或U。
u"中文字符串"