【原创】《笨办法学python》(8)----string

 

字符串基本操作

(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"中文字符串"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值