Subsections
日誌
編碼
字串
列表和字典
一、日誌
#!/usr/bin/python# -*- coding: utf-8 -*-'''Created on 2013-4-26@author: chenll日誌等級NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL如果把looger的層級設定為INFO, 那麼小於INFO層級的日誌都不輸出, 大於等於INFO級 輸出'''import logging # 建立一個logger logger = logging.getLogger('Log') logger.setLevel(logging.DEBUG) # 建立一個handler,用於寫入記錄檔 fh = logging.FileHandler('test.log') fh.setLevel(logging.DEBUG) # 再建立一個handler,用於輸出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # 定義handler的輸出格式 ,時間-類名-等級名稱-日誌內容formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) # 給logger添加handler logger.addHandler(fh) logger.addHandler(ch) # 記錄一條日誌 logger.info('building table')
控制台和test.log 輸出:
2013-04-26 10:40:46,381 - Log - INFO - building table
二、編碼
python 中字串分兩種:一種是byte string ,一種是unicode string
py檔案預設是ASCII編碼,中文在顯示時會做一個ASCII到系統預設編碼的轉換,這時就會出錯:SyntaxError: Non-ASCII character。需要在代碼檔案的第一行或第二行添加編碼指示#coding=utf- 8 所有的中文ex:myName="陳" 都會宣告成utf-8 編碼的byte string.
一般python 預設編輯器是ascii ,如果需要更改,操作如下:
importsys
reload(sys)
sys.setdefaultencoding (' utf-8')
字串在Python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。因此,轉碼的時候一定要先搞明白,字串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼代碼中字串的預設編碼與代碼檔案本身的編碼一致。
1. Unicode 對任何語言文字,都是 1個字元1個編碼,所以“hi!”是3個Unicode字元,“你好!”也是3個Unicode字元。
2. UTF-8 用3個字元來表示1個中文字元,用1個字元來表示英文字元。所以,“hi!”是3個UTF-8字元,“你好!”是7個UTF-8字元。
3. GBK 用2個字元來表示1個中文字元,用1個字元來表示英文字元。所以,“hi!”是3個GBK字元,“你好!”是5個GBK字元。
4. decode方法,是任何字串具有的方法,將字串轉換成unicode格式,參數是源字串的編碼代號。
5. encode 方法,任何字串具有的方法,將字串轉換成參數指定的格式,參數是目標編碼代號。
三、字串常用操作
#!/usr/bin/python#-*- coding: utf-8 -*-'''Created on 2013-4-30@author: chenlly'''#複製字串#strcpy(sStr1,sStr2)sStr1 = 'strcpy'sStr2 = sStr1sStr1 = 'strcpy2'print sStr2#連接字串#strcat(sStr1,sStr2)sStr1 = 'strcat'sStr2 = 'append'sStr1 += sStr2print sStr1#尋找字元#strchr(sStr1,sStr2)# < 0 為未找到sStr1 = 'strchr'sStr2 = 'ch'nPos = sStr1.index(sStr2)print nPos#尋找字串#strchr(sStr1,sStr2)sStr1 = 'abcdefg'sStr2 = 'cde'print sStr1.find(sStr2)#掃描字串是否包含指定的字元#strspn(sStr1,sStr2)sStr1 = '12345678'sStr2 = '456'print len(sStr1 and sStr2)#比較字串#strcmp(sStr1,sStr2)#sStr1 == sStr2:0#sStr1 > sStr2:1#sStr1 < sStr2:-1sStr1 = 'strchr'sStr2 = 'strch'print cmp(sStr1,sStr2)#字串長度#strlen(sStr1)sStr1 = 'strlen'print len(sStr1)#將字串中的大小寫轉換#strlwr(sStr1)sStr1 = 'JCstrlwr'sStr1 = sStr1.upper()sStr1 = sStr1.lower()print sStr1#追加指定長度的字串#strncat(sStr1,sStr2,n)sStr1 = '12345'sStr2 = 'abcdef'n = 3sStr1 += sStr2[0:n]print sStr1#字串指定長度比較#strncmp(sStr1,sStr2,n)sStr1 = '12345'sStr2 = '123bc'n = 3print cmp(sStr1[0:n],sStr2[0:n])#複製指定長度的字元#strncpy(sStr1,sStr2,n)sStr1 = ''sStr2 = '12345'n = 3sStr1 = sStr2[0:n]print sStr1#將字串前n個字元替換為指定的字元#strnset(sStr1,ch,n)sStr1 = '12345'ch = 'r'n = 3sStr1 = n * ch + sStr1[3:]print sStr1#掃描字串#strpbrk(sStr1,sStr2)sStr1 = 'cekjgdklab'sStr2 = 'gka'nPos = -1for c in sStr1: if c in sStr2: nPos = sStr1.index(c) break;print nPos#翻轉字串#strrev(sStr1)sStr1 = 'abcdefg'sStr1 = sStr1[::-1]print sStr1#分割字串#strtok(sStr1,sStr2)sStr1 = 'ab,cde,fgh,ijk'sStr2 = ','sStr1 = sStr1[sStr1.find(sStr2) + 1:]print sStr1#或者s = 'ab,cde,fgh,ijk'print(s.split(','))#連接字串delimiter = ','mylist = ['Brazil', 'Russia', 'India', 'China']print delimiter.join(mylist)#只顯示字母與數字def OnlyCharNum(s,oth=''): s2 = s.lower(); fomart = 'abcdefghijklmnopqrstuvwxyz0123456789' for c in s2: if not c in fomart: s = s.replace(c,''); return s;print(OnlyCharNum("中國a000 aa-b"))
四、字典和列表
dict
採用索引值對(key-value)的形式儲存資料。python對key進行雜湊函數運算,根據計算的結果決定value的儲存地址,所以字典是無序儲存的,且key必須是可雜湊的。可雜湊表示key必須是不可變類型,如:數字、字串、只含不可變類型元素的元組(1,2,3,’abc’)
len(a) |
得到字典a中元素的個數 |
a[k] |
取得字典a中鍵K所對應的值 |
a[k] = v |
設定字典a中鍵k所對應的值成為v |
del a[k] |
使用 key從一個 dictionary中刪除獨立的元素。如,刪除Dictionary dic中的user=’root’:del dic[“user”] |
a.clear() |
從一個 dictionary中清除所有元素。如,刪除Dictionary dic中的所有元素:dic.clear() |
a.copy() |
得到字典副本 |
k in a |
字典中存在鍵k則為返回True,沒有則返回False |
k not in a |
字典中不存在鍵k則為返回true,反之返回False |
a.has_key(k) |
判斷字典a中是否含有鍵k |
a.items() |
得到字典a中的鍵—值對list |
a.keys() |
得到字典a中鍵的list |
a.update([b]) |
從b字典中更新a字典,如果鍵相同則更新,a中不存在則追加. |
a.fromkeys(seq[, value]) |
建立一個新的字典,其中的鍵來自sql,值來自value |
a.values() |
得到字典a中值的list |
a.get(k[, x]) |
從字典a中取出鍵為k的值,如果沒有,則返回x |
a.setdefault(k[, x]) |
將鍵為k的值設為預設值x。如果字典a中存在k,則返回k的值,如果不存在,向字典中添加k-x索引值對,並傳回值x |
a.pop(k[, x]) |
取出字典a中鍵k的值,並將其從字典a中刪除,如果字典a中沒有鍵k,則傳回值x |
a.popitem() |
取出字典a中索引值對,並將其從字典a中刪除 |
a.iteritems() |
返回字典a所有鍵-值對的迭代器。 |
a.iterkeys() |
返回字典a所有鍵的迭代器。 |
a.itervalues() |
返回字典a所有值的迭代器。 |
list
python中集合對象(set)是一組無序排列的可雜湊的值,包含兩種類型:可變集合(set)和不可變集
合(frozenset),所以set不是可雜湊的,frozenset是可雜湊的,能當作字典的鍵。
#!/usr/bin/python#-*- coding: utf-8 -*-'''Created on 2013-4-21@author: chenlly'''def disPlay(dict): for key in dict: print key + "," + dict[key] def dicFun(): #dict2 = dict(); dict2 = {'name':'chen','port':'8809'} #遍曆字典 disPlay(dict2) print '---end disPlay---' #新增資料項目 dict2['ip'] = '198.164' disPlay(dict2) print '---end add---' #修改資料項目 dict2['name'] = 'laoben' disPlay(dict2) print '---end edit---' #刪除已經存在的資料項目 del dict2['name'] disPlay(dict2) print '---end remove---' def main(): dicFun(); if __name__ == "__main__": main();