Python入門5

#20100805
#字符串
#在Python中字符串變成了一種強大的處理工具集
#Python的字符串被劃分爲不可變序列這一類別,意味着這些字符串所包含的字符存在從左至右的位置順序,並且它們不可以在原處修改。
'''
    操作                      解釋
    s1 = ' '                空字符串
    s2 = "spam'a"           雙引號
    s3 = r'/tmep/spam'      Raw字符串
    s4 = u'spam'            Unincode字符串
    s1 + s2                 合併
    s2 * 3                  重複
    s2[i]                   索引
    s2[i:j]                 分片
    len(s2)                 求長度
    "a %s parrot" % type    字符串格式化
    s2.find('pa')           搜索
    s2.rstrip()             移除空格
    s2.replace('pa','xx')   替換
    s1.split(',')           用展位符分隔
    s1.isdigit()            內容測試
    s1.lower()              短信息轉換
    for x in s2
    'spam' in s2            迭代,成員關係
'''
'''
title = "Meaning " 'of/'s' " Life"
print title
s = 'a/nb/tc'
print s
print len(s)
'''

#python 提供了一套轉義字符序列   
#    轉義                  意義
#    /newline            忽視(連接)
#   //                  反斜線(保留/)
#    /'                 單引號(保留')
#    /"                 雙引號(保留")
#    /a                  響鈴
#    /b                  倒退
#    /f                  換頁
#    /n                  換行
#    /r                  返回
#    /t                  水平製表符
#    /v                  垂直製表符
#    /N{id}              Unicode數據庫id
#    /uhhhh              Unicode 16位的十六進制
#    /Uhhhh...           Unicode 32位的十六進制
#    /xhh                十六進制
#    /ooo                八進制
#    /0                  Null(不是字符串結尾)
#    /other              不轉義(保留)

'''
一些轉義序列允許你一個字符串的字節中嵌入絕對的二進制值 
>>> s = 'a/0b/0c'
>>> s
'a/x00b/x00c'
>>> len(s)
5
>>>
Python中 0(零)字符不會像C語言那樣去中斷一個字符串

>>> s = '/001/002/x03'
>>> s
'/x01/x02/x03'
>>> len(s)
3
>>>
字符串抑制轉義
Windows打開文件時的特殊例子:
>>> myfile = open('C:/new/test.dat','w')
Traceback (most recent call last):
  File "<pyshell#123>", line 1, in <module>
    myfile = open('C:/new/test.dat','w')
IOError: [Errno 2] No such file or directory: 'C:/new/test.dat'
>>>
r (大寫或小寫)出現在字符串的第一個引號前面,將會關閉轉義機制
>>> myfile = open(r'C:/new/test.dat','w')
>>>
另外一種方法
>>> myfile = open('C://new//test.dat','w')
>>> path = r'C:/new/data.dat'
>>> path
'C://new//data.dat'
>>> print path
C:/new/data.dat
>>> len(path)
15

三重引號編寫多行字符串塊============
字符串編碼更大的字符集==============
Unicode字符串有時稱爲“寬“字符串。
Unicode字符串典型地應用於支持國際化的應用
在Pyhon中,可以在腳本中通過開頭的引號前增加字母U(大寫或小寫)編寫個Unicode字符串
>>> u'spam'
u'spam'
>>> 'ni' + u'spam'
u'nispam'
>>>
Unicode字符串也可以被合併、索引、分片、通過re模塊進行分配,並且不能夠在進行實地修改
>>> str(u'spam')
'spam'
>>> unicode('spam')
u'spam'
>>>

myjob = "technicaleng"
for i in myjob:
    print i,
for i in myjob:
    print i
'''
#字符串轉換工具
#int函數將字符串轉換爲數字
#str將數字轉換爲字符串表達形式
#函數int和float只能夠對數字進行轉換。
#混合字符串和數字類型進行+這樣的操作,你能夠在進行這樣的操作之前手動進行轉換  
a = "42"
b = 1
#顯示數字
print int(a) + b
#顯示字符串
print a + str(b)

#字符串代碼轉換
#單個的字符也可以通過將其傳給內置的ord函數轉換爲其對應的ASCII碼---這個函數實際上返回的是這個字符在內存中對應的字符的二進制值。
#chr函數將會執行相反的操作,獲取ASCII碼,並將其轉化爲對應的字符。
print ord('s')
print chr(115)
print chr(100)

s = '5'
s = chr(ord(s) + 1)
print s
s = chr(ord(s) + 1)
print s

print int('5')
print ord('5') - ord('0')
#轉換可以與循環語句一起使用,可以將一個表示二進制數的字符串轉換爲等值的整數--
B = '1101'
I = 0
while B:
    I = I * 2 + (ord(B[0]) - ord('0'))
    B = B[1:]
print I

#修改字符串,不能再實地修改一個字符串,例如 給一個索引進行賦值
S = 'Spam'
print S
print S + 'SPAM!'
print S[:4] + 'Burger' + S[-1]

print S.replace('pa', 'JinQiang')

#字符串格式化
#字符串格式化表達式來創建新的文本值
print 'That is %d %s bird!' % (1,'dead')

#Python在對字符串操作的時候定義了%二進制操作符,%應用在字符串中,是對字符串的值進行格式化,這一操作取決於格式化定義的字符串
#1、在%操作符的左側位置放置一個需要進行格式化的字符串,這個字符串帶有一個或多個嵌入的轉換目標,都以%號開頭(例如 %d)
#2、在%操作符的右側位置放置一個對象(或多個,在括號內),這些對象將會插入到左側想讓Python進行格式化字符串的(或多個)轉換目標的位置上去。

myexport = 'NI'
print 'Hello %s hao a' % myexport

print 'Hao are you %s %s %s %s %s' % ('What','are','you','doing',4)

#除非你要做特殊格式化,一般你只需要記得用%s這個代碼來格式化表達式。
#格式化總是返回新的字符串作爲結果而不是對左側的字符串進行修改;由於字符串是不可變的,所以只能這樣操作。可以分配一個變量名來保存結果
#更高級的字符串格式化
'''
 代碼                              意義
  %s                            字符串(或任何對象)
  %r                            s,但使用repr,而不是str
  %c                            字符
  %d                            十進制(整數)
  %i                            整數
  %u                            無號
  %o                            八進位整數
  %x                            十六進制整數
  %X                            X,但打印大寫
  %e                            浮點指數
  %E                            e,但打印大寫
  %f                            浮點十進制
  %g                            浮點e或f
  %G                            浮點E或f
  %%                            %常量
'''
#對整數進行默認格式化,然後進行6位的左對齊格式化,最後進行了6位補0的格式化
x = 1234
res = "integers: ...%d...%-6d...%06d" % (x,x,x)
print res
x = 1.23456789
print x
print '%e | %f | %g' % (x,x,x)


#基於字典的字符串格式化
#字符串的格式化同時也允許左邊的轉換目標來引用右邊字典中的鍵來提取對應的值。
print "%(n)d %(x)s" % {"n":1,"x":'Spam'}

#建立一個數值字典,並利用一個基於鍵的引用的格式化表達式一次性替換他們。
reply = '''
greetints ...
hello %(name)s!
You are squared is %(age)s
'''
values = {'name':'alice','age':45}
print reply % values

#常與內置函數vars聯繫起來一起使用,這個函數返回的字典包含了所有在本函數調用時存在的變量。
food = 'apple'
age = 25
print vars()
print "%(age)d  %(food)s" % vars()

#字符串方法:
#屬性讀取
#具有object.attribute格式的表達式可以理解爲"讀取object對象的屬性attribute的值"
#函數調用表達式:
#具有函數(參數)格式的表達式意味着”調用函數代碼,傳遞零或者更多逗號隔開的參數值對象,最後返回函數的返回值
#Python首先讀取對象方法,然後調用它,傳遞參數。
#全部替換
print 'aa$bb$cc$dd'.replace('$','XU')
#只把第一個$換成XU
print 'aa$bb$cc$dd'.replace('$','XU',1)
#把前兩個$換成XU
print 'aa$bb$cc$dd'.replace('$','XU',2)
print 'aa$bb$cc$dd'.replace('$','XU',3)
#如果需要在任何偏移時都被替換一個固定長度的字符串,可以再做一次替換,或者使用字符串方法find搜索的字符,之後使用分片
S = 'xxxxSPAMxxxxSPAMxxxx'
where = S.find('SPAM')
print where
print S
S = S[:where] + 'EGGS' + S[(where+4):]
print S

S = 'spammy'
L = list(S)
print L

L[3] = 'X'
L[4] = 'U'
print L
print S
#合成 一個字符串
S = ''.join(L)
print S

#split 提取組件,將一個字符串分割爲一個子字符串的列表,以分隔字符串爲標準。
#默認分隔符爲空格
line = 'aaa bbb ccc'
cols = line.split()
print cols
#以,號爲分隔符
line = 'alice,bob,dive'
print line.split(',')
#以字符串爲分隔符
line = 'nihaoSPAMaliceSPAMbob'
print line.split('SPAM')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章