Python 筆記




應用

  • 等待用戶輸入:
    input([prompt]) 函數和 raw_input([prompt]) 函數基本類似,但是 input 可以接收一個Python表達式作爲輸入,並將運算結果返回。
raw_input("\n\nPress the enter key to exit.")

  • Python數據類型轉換
  1. int(x [,base])     x轉換爲一個整數
  2. long(x [,base] ) x轉換爲一個長整數
  3. float(x)     x轉換到一個浮點數
  4. str(x)     將對象 x 轉換爲字符串
  5. repr(x)     將對象 x 轉換爲表達式字符串
  6. eval(str) 用來計算在字符串中的有效Python表達式,並返回一個對象
  7. tuple(s) 將序列 s 轉換爲一個元組
  8. list(s)     將序列 s 轉換爲一個列表
  9. set(s)     轉換爲可變集合
  10. dict(d)     創建一個字典。d 必須是一個序列 (key,value)元組。


Python字符串格式化
  1. print "%s : %d " % ('hz', 21) 
  2.     %s 格式化字符串
  3.     %d 格式化整數
  4.     %u 格式化無符號整型
  5.     %f 格式化浮點數字,可指定小數點後的精度


常用函數(list、tup

  1. cmp(list1, list2) 比較兩個列表的元素
  2. len(list) 列表元素個數
  3. max(list) 返回列表元素最大值
  4. min(list) 返回列表元素最小值

  • tuple(seq) 將列表轉換爲元組。
  • list(seq)將元組轉換爲列表

  • 列表函數&方法
    1. list.append(obj) 在列表末尾添加新的對象
    2. list.count(obj)     統計某個元素在列表中出現的次數
    3. list.extend(seq) 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)
    4. list.index(obj)     從列表中找出某個值第一個匹配項的索引位置
    5. list.insert(index, obj) 將對象插入列表
    6. list.pop(obj=list[-1]) 移除列表中的一個元素(默認最後一個元素),並且返回該元素的值
    7. list.remove(obj) 移除列表中某個值的第一個匹配項
    8. list.reverse()     反向列表中元素
    9. list.sort([func]) 對原列表進行排序

    字符串內建函數

    方法 描述
    string.capitalize() 把字符串的第一個字符大寫
    string.count(str, beg=0, end=len(string)) 返回 str 在 string 裏面出現的次數,如果 beg 或者 end 指定則返回指定範圍內 str 出現的次數
    string.endswith(obj, beg=0, end=len(string)) 檢查字符串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的範圍內是否以 obj 結束,如果是,返回 True,否則返回 False.
    string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符號轉爲空格,tab 符號默認的空格數是 8。
    string.find(str, beg=0, end=len(string)) 檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1
    string.index(str, beg=0, end=len(string)) 跟find()方法一樣,只不過如果str不在 string中會報一個異常.
    string.isalnum() 如果 string 至少有一個字符並且所有字符都是字母或數字則返回 True,否則返回 False
    string.isalpha() 如果 string 至少有一個字符並且所有字符都是字母則返回 True,否則返回 False
    string.isdigit() 如果 string 只包含數字則返回 True 否則返回 False.
    string.islower() 如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是小寫,則返回 True,否則返回 False
    string.isnumeric() 如果 string 中只包含數字字符,則返回 True,否則返回 False
    string.isspace() 如果 string 中只包含空格,則返回 True,否則返回 False.
    string.isupper() 如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是大寫,則返回 True,否則返回 False
    string.join(seq) 以 string 作爲分隔符,將 seq 中所有的元素(的字符串表示)合併爲一個新的字符串
    string.ljust(width) 返回一個原字符串左對齊,並使用空格填充至長度 width 的新字符串
    string.lower() 轉換 string 中所有大寫字符爲小寫.
    string.lstrip() 截掉 string 左邊的空格
    max(str) 返回字符串 str 中最大的字母。
    min(str) 返回字符串 str 中最小的字母。
    string.partition(str) 有點像 find() split()的結合體, str 出現的第一個位置起,    string     3     
     (string_pre_str,str,string_post_str),如果 string 中不包含str  string_pre_str == string.
    string.replace(str1, str2,  num=string.count(str1)) 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.
    string.rfind(str, beg=0,end=len(string) ) 類似於 find()函數,不過是從右邊開始查找.
    string.rindex( str, beg=0,end=len(string)) 類似於 index(),不過是從右邊開始.
    string.rjust(width) 返回一個原字符串右對齊,並使用空格填充至長度 width 的新字符串
    string.rpartition(str) 類似於 partition()函數,不過是從右邊開始查找.
    string.rstrip() 刪除 string 字符串末尾的空格.
    string.split(str="", num=string.count(str)) 以 str 爲分隔符切片 string,如果 num有指定值,則僅分隔 num 個子字符串
    string.splitlines(num=string.count('\n')) 按照行分隔,返回一個包含各行作爲元素的列表,如果 num 指定則僅切片 num 個行.
    string.startswith(obj, beg=0,end=len(string)) 檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定範圍內檢查.
    string.strip([obj]) 在 string 上執行 lstrip()和 rstrip()
    string.swapcase() 翻轉 string 中的大小寫
    string.istitle() 如果 string 是標題化的(見 title())則返回 True,否則返回 False
    string.title() 返回"標題化"的 string,就是說所有單詞都是以大寫開始,其餘字母均爲小寫(見 istitle())
    string.translate(str, del="") 根據 str 給出的表(包含 256 個字符)轉換 string 的字符,要過濾掉的字符放到 del 參數中
    string.upper() 轉換 string 中的小寫字母爲大寫
    string.zfill(width) 返回長度爲 width 的字符串,原字符串 string 右對齊,前面填充0

    File(文件) 方法

    file 對象使用 open 函數來創建,下表列出了 file 對象常用的函數:

    file的方法 描述
    close() 關閉文件。關閉後文件不能再進行讀寫操作。
    flush() 刷新文件內部緩衝,直接把內部緩衝區的數據立刻寫入文件, 
    而不是被動的等待輸出緩衝區寫入。
    fileno() 返回一個整型的文件描述符(file descriptor FD 整型), 
    可以用在如os模塊的read方法等一些底層操作上。
    isatty() 如果文件連接到一個終端設備返回 True,否則返回 False。
    next() 返回文件下一行。
    read([size]) 從文件讀取指定的字節數,如果未給定或爲負則讀取所有。
    readline([size]) 讀取整行,包括 "\n" 字符。
    readlines([sizehint]) 讀取所有行並返回列表,若給定sizeint>0,返回總和大約爲sizeint字節的行, 
    實際讀取值可能比sizhint較大, 因爲需要填充緩衝區。
    seek(offset[, whence]) 設置文件當前位置
    tell() 返回文件當前位置。
    truncate([size]) 截取文件,截取的字節通過size指定,默認爲當前文件位置。
    write(str) 將字符串寫入文件,沒有返回值。
    writelines(sequence) 向文件寫入一個序列字符串列表,如果需要換行則要自己加入每行的換行符。

    字典內置方法

    1. radiansdict.clear()     刪除字典內所有元素
    2. radiansdict.copy()     返回一個字典的淺複製
    3. radiansdict.fromkeys() 創建一個新字典,以序列seq中元素做字典的鍵,val爲字典所有鍵對應的初始值
    4. radiansdict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default
    5. radiansdict.has_key(key) 如果鍵在字典dict裏返回true,否則返回false
    6. radiansdict.items()     以列表返回可遍歷的(鍵, 值) 元組數組
    7. radiansdict.keys()     以列表返回一個字典所有的鍵
    8. radiansdict.setdefault(key, default=None) get() 類似,但如果鍵不存在於字典中,將會添加鍵並將值設爲default
    9. radiansdict.update(dict2) 把字典dict2的鍵/值對更新到dict
    10. radiansdict.values()     以列表返回字典中的所有值

    隨機數

    1. import random
    2. random.randrange ([start,] stop [,step])
    3. random.random()

    數學函數

    1. abs(x)     返回數字的絕對值,如abs(-10) 返回 10
    2. cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
    3. fabs(x)     返回數字的絕對值,如math.fabs(-10) 返回10.0
    4. max(x1, x2,...) 返回給定參數的最大值,參數可以爲序列。
    5. min(x1, x2,...) 返回給定參數的最小值,參數可以爲序列。
    6. sqrt(x)     返回數字x的平方根,數字可以爲負數,返回類型爲實數,如math.sqrt(4)返回 2+0j

    Time 模塊

    Time 模塊包含了以下內置函數,既有時間處理相的,也有轉換時間格式的:

    序號 函數及描述
    1 time.altzone
    返回格林威治西部的夏令時地區的偏移秒數。如果該地區在格林威治東部會返回負值(如西歐,包括英國)。對夏令時啓用地區才能使用。
    2 time.asctime([tupletime])
    接受時間元組並返回一個可讀的形式爲"Tue Dec 11 18:07:14 2008"(2008年12月11日 週二18時07分14秒)的24個字符的字符串。
    3 time.clock( )
    用以浮點數計算的秒數返回當前的CPU時間。用來衡量不同程序的耗時,比time.time()更有用。
    4 time.ctime([secs])
    作用相當於asctime(localtime(secs)),未給參數相當於asctime()
    5 time.gmtime([secs])
    接收時間輟(1970紀元後經過的浮點秒數)並返回格林威治天文時間下的時間元組t。注:t.tm_isdst始終爲0
    6 time.localtime([secs])
    接收時間輟(1970紀元後經過的浮點秒數)並返回當地時間下的時間元組t(t.tm_isdst可取0或1,取決於當地當時是不是夏令時)。
    7 time.mktime(tupletime)
    接受時間元組並返回時間輟(1970紀元後經過的浮點秒數)。
    8 time.sleep(secs)
    推遲調用線程的運行,secs指秒數。
    9 time.strftime(fmt[,tupletime])
    接收以時間元組,並返回以可讀字符串表示的當地時間,格式由fmt決定。
    10 time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
    根據fmt的格式把一個時間字符串解析爲時間元組。
    11 time.time( )
    返回當前時間的時間戳(1970紀元後經過的浮點秒數)。
    12 time.tzset()
    根據環境變量TZ重新初始化時間相關設置。

    Time模塊包含了以下2個非常重要的屬性:

    序號 屬性及描述
    1 time.timezone
    屬性time.timezone是當地時區(未啓動夏令時)距離格林威治的偏移秒數(>0,美洲;<=0大部分歐洲,亞洲,非洲)。
    2 time.tzname
    屬性time.tzname包含一對根據情況的不同而不同的字符串,分別是帶夏令時的本地時區名稱,和不帶的。

    • 日期處理
    1. #!/usr/bin/python
    2. # -*- coding: UTF-8 -*-
    3. import time; # 引入time模塊
    4. import calendar;
    5. ticks = time.time()
    6. print ("time_t:", int(ticks))
    7. localtime = time.localtime(int(ticks))
    8. print ("localtime :", localtime)
    9. # 格式化成2016-05-12 20:47:50形式
    10. print (time.strftime("%Y-%m-%d %H:%M:%S", localtime))
    11. # 格式化成Thu May 12 20:47:50 2016形式
    12. strlocaltime = time.strftime("%a %b %d %H:%M:%S %Y", localtime)
    13. print (strlocaltime)
    14. # 將格式字符串轉換爲時間戳
    15. print (time.mktime(time.strptime(strlocaltime,"%a %b %d %H:%M:%S %Y")))
    16. # print (calendar.month(2016, 1))
    結果:
    1. time_t: 1463057682
    2. localtime : time.struct_time(tm_year=2016, tm_mon=5, tm_mday=12, tm_hour=20, tm_min=54, tm_sec=42, tm_wday=3, tm_yday=133, tm_isdst=0)
    3. 2016-05-12 20:54:42
    4. Thu May 12 20:54:42 2016
    5. 1463057682.0

    python標準異常

    異常名稱 描述
    BaseException 所有異常的基類
    SystemExit 解釋器請求退出
    KeyboardInterrupt 用戶中斷執行(通常是輸入^C)
    Exception 常規錯誤的基類
    StopIteration 迭代器沒有更多的值
    GeneratorExit 生成器(generator)發生異常來通知退出
    StandardError 所有的內建標準異常的基類
    ArithmeticError 所有數值計算錯誤的基類
    FloatingPointError 浮點計算錯誤
    OverflowError 數值運算超出最大限制
    ZeroDivisionError 除(或取模)零 (所有數據類型)
    AssertionError 斷言語句失敗
    AttributeError 對象沒有這個屬性
    EOFError 沒有內建輸入,到達EOF 標記
    EnvironmentError 操作系統錯誤的基類
    IOError 輸入/輸出操作失敗
    OSError 操作系統錯誤
    WindowsError 系統調用失敗
    ImportError 導入模塊/對象失敗
    LookupError 無效數據查詢的基類
    IndexError 序列中沒有此索引(index)
    KeyError 映射中沒有這個鍵
    MemoryError 內存溢出錯誤(對於Python 解釋器不是致命的)
    NameError 未聲明/初始化對象 (沒有屬性)
    UnboundLocalError 訪問未初始化的本地變量
    ReferenceError 弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
    RuntimeError 一般的運行時錯誤
    NotImplementedError 尚未實現的方法
    SyntaxError Python 語法錯誤
    IndentationError 縮進錯誤
    TabError Tab 和空格混用
    SystemError 一般的解釋器系統錯誤
    TypeError 對類型無效的操作
    ValueError 傳入無效的參數
    UnicodeError Unicode 相關的錯誤
    UnicodeDecodeError Unicode 解碼時的錯誤
    UnicodeEncodeError Unicode 編碼時錯誤
    UnicodeTranslateError Unicode 轉換時錯誤
    Warning 警告的基類
    DeprecationWarning 關於被棄用的特徵的警告
    FutureWarning 關於構造將來語義會有改變的警告
    OverflowWarning 舊的關於自動提升爲長整型(long)的警告
    PendingDeprecationWarning 關於特性將會被廢棄的警告
    RuntimeWarning 可疑的運行時行爲(runtime behavior)的警告
    SyntaxWarning 可疑的語法的警告
    UserWarning 用戶代碼生成的警告


    正則表達式在python中的應用

    正則表達式修飾符 - 可選標誌

    正則表達式可以包含一些可選標誌修飾符來控制匹配的模式。修飾符被指定爲一個可選的標誌。多個標誌可以通過按位 OR(|) 它們來指定。如 re.I | re.M 被設置成 I 和 M 標誌:

    修飾符 描述
    re.I 使匹配對大小寫不敏感
    re.L 做本地化識別(locale-aware)匹配
    re.M 多行匹配,影響 ^ 和 $
    re.S 使 . 匹配包括換行在內的所有字符
    re.U 根據Unicode字符集解析字符。這個標誌影響 \w, \W, \b, \B.
    re.X 該標誌通過給予你更靈活的格式以便你將正則表達式寫得更易於理解。

    正則表達式模式

    模式字符串使用特殊的語法來表示一個正則表達式:

    字母和數字表示他們自身。一個正則表達式模式中的字母和數字匹配同樣的字符串。

    多數字母和數字前加一個反斜槓時會擁有不同的含義。

    標點符號只有被轉義時才匹配自身,否則它們表示特殊的含義。

    反斜槓本身需要使用反斜槓轉義。

    由於正則表達式通常都包含反斜槓,所以你最好使用原始字符串來表示它們。模式元素(如 r'/t',等價於'//t')匹配相應的特殊字符。

    下表列出了正則表達式模式語法中的特殊元素。如果你使用模式的同時提供了可選的標誌參數,某些模式元素的含義會改變。

    模式 描述
    ^ 匹配字符串的開頭
    $ 匹配字符串的末尾。
    . 匹配任意字符,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符。
    [...] 用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k'
    [^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
    re* 匹配0個或多個的表達式。
    re+ 匹配1個或多個的表達式。
    re? 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式
    re{ n} 精確匹配n個前面表達式
    re{ n,} 精確匹配至少n個前面表達式。
    re{ n, m} 匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式
    a| b 匹配a或b
    (re) G匹配括號內的表達式,也表示一個組
    (?imx) 正則表達式包含三種可選標誌:i, m, 或 x 。隻影響括號中的區域。
    (?-imx) 正則表達式關閉 i, m, 或 x 可選標誌。隻影響括號中的區域。
    (?: re) 類似 (...), 但是不表示一個組
    (?imx: re) 在括號中使用i, m, 或 x 可選標誌
    (?-imx: re) 在括號中不使用i, m, 或 x 可選標誌
    (?#...) 註釋.
    (?= re) 前向肯定界定符。如果所含正則表達式,以 ... 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩餘部分還要嘗試界定符的右邊。
    (?! re) 前向否定界定符。與肯定界定符相反;當所含表達式不能在字符串當前位置匹配時成功
    (?> re) 匹配的獨立模式,省去回溯。
    \w 匹配字母數字
    \W 匹配非字母數字
    \s 匹配任意空白字符,等價於 [\t\n\r\f].
    \S 匹配任意非空字符
    \d 匹配任意數字,等價於 [0-9].
    \D 匹配任意非數字
    \A 匹配字符串開始
    \Z 匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。c
    \z 匹配字符串結束
    \G 匹配最後匹配完成的位置。
    \b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
    \B 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
    \n, \t, 等. 匹配一個換行符。匹配一個製表符。等
    \1...\9 匹配第n個分組的子表達式。
    \10 匹配第n個分組的子表達式,如果它經匹配。否則指的是八進制字符碼的表達式。

    正則表達式實例
    字符匹配
    實例 描述
    python 匹配 "python".
    字符類
    實例 描述
    [Pp]ython 匹配 "Python" 或 "python"
    rub[ye] 匹配 "ruby" 或 "rube"
    [aeiou] 匹配中括號內的任意一個字母
    [0-9] 匹配任何數字。類似於 [0123456789]
    [a-z] 匹配任何小寫字母
    [A-Z] 匹配任何大寫字母
    [a-zA-Z0-9] 匹配任何字母及數字
    [^aeiou] 除了aeiou字母以外的所有字符
    [^0-9] 匹配除了數字外的字符
    特殊字符類
    實例 描述
    . 匹配除 "\n" 之外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。
    \d 匹配一個數字字符。等價於 [0-9]。
    \D 匹配一個非數字字符。等價於 [^0-9]。
    \s 匹配任何空白字符,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
    \S 匹配任何非空白字符。等價於 [^ \f\n\r\t\v]。
    \w 匹配包括下劃線的任何單詞字符。等價於'[A-Za-z0-9_]'。
    \W 匹配任何非單詞字符。等價於 '[^A-Za-z0-9_]'。

    re.match函數

    re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。

    re.search方法

    re.search 掃描整個字符串並返回第一個成功的匹配。

    • 1

    1. print("match: ",re.match('www', 'www.163.com').span()) # 在起始位置匹配
    2. print("match: ",re.match('com', 'www.163.com')) # 不在起始位置匹配
    3. print("search: ",re.search('www', 'www.163.com').span()) # 在起始位置匹配
    4. print("search: ",re.search('com', 'www.163.com').span()) # 不在起始位置匹配
    5. matchObj = re.match( r'(.*) are (.*?) .*', "Cats are smarter than dogs", re.M|re.I) #?是爲了group(2)不會帶上than
    6. if matchObj:
    7. print ("matchObj.group() : ", matchObj.group())
    8. print ("matchObj.group(1) : ", matchObj.group(1))
    9. print ("matchObj.group(2) : ", matchObj.group(2))
    10. else:
    11. print ("No match!!")
    1. match: (0, 3)
    2. match: None
    3. search: (0, 3)
    4. search: (8, 11)
    5. matchObj.group() : Cats are smarter than dogs
    6. matchObj.group(1) : Cats
    7. matchObj.group(2) : smarter
    • 2
    1. phone = "2004-959-559 # This is Phone Number"
    2. # Delete Python-style comments
    3. print ("Phone Num : ", re.sub(r' #.*$', "**", phone))
    4. # Remove anything other than digits
    5. print ("Phone Num : ", re.sub(r'\D', ".", phone))
    6. print ("Phone Num : ", re.sub(r'\D', "", phone))
    1. Phone Num : 2004-959-559**
    2. Phone Num : 2004.959.559.......................
    3. Phone Num : 2004959559

    python操作mysql數據庫


    Python 網絡編程

    • serv:
    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. #python2.7
    4. import socket # 導入 socket 模塊
    5. s = socket.socket() # 創建 socket 對象
    6. host = socket.gethostname() # 獲取本地主機名
    7. port = 12345 # 設置端口
    8. s.bind((host, port)) # 綁定端口
    9. s.listen(5) # 等待客戶端連接
    10. while True:
    11. c, addr = s.accept() # 建立客戶端連接。
    12. print '連接地址:', addr
    13. c.send('歡迎訪問菜鳥教程!')
    14. c.close() # 關閉連接
    • client:
    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. #python2.7
    4. import socket # 導入 socket 模塊
    5. s = socket.socket() # 創建 socket 對象
    6. host = socket.gethostname() # 獲取本地主機名
    7. port = 12345 # 設置端口好
    8. s.connect((host, port))
    9. print s.recv(1024)
    10. s.close()


    Python SMTP發送郵件

    第三方 SMTP 服務
    1. #!/usr/bin/python
    2. # -*- coding: UTF-8 -*-
    3. import smtplib
    4. from email.mime.text import MIMEText
    5. from email.header import Header
    6. # 第三方 SMTP 服務
    7. mail_host="mail.163.com" #設置服務器
    8. mail_user="abc" #用戶名
    9. mail_pass=raw_input("Please input password : ") #口令
    10. sender = '[email protected]'
    11. receivers = ['[email protected]'] # 接收郵件,可設置爲你的QQ郵箱或者其他郵箱
    12. message = MIMEText('Python send mail...', 'plain', 'utf-8')
    13. message['From'] = Header("Admin")
    14. message['To'] = Header("MyTester")
    15. message['Subject'] = Header("Hello My Lord")
    16. try:
    17. smtpObj = smtplib.SMTP()
    18. smtpObj.connect(mail_host, 25) # 25 爲 SMTP 端口號
    19. smtpObj.login(mail_user,mail_pass)
    20. smtpObj.sendmail(sender, receivers, message.as_string())
    21. print "Send mail ok!"
    22. except smtplib.SMTPException:
    23. print "Error: Send mail failed!"


       

    Python 多線程


    Python2.x與3.x版本區別

     



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