python學習筆記(六):經常使用模塊

1、模塊、包python

什麼是模塊?linux

模塊實質上就是一個python文件,它是用來組織代碼的,意思就是說把python代碼寫到裏面,文件名就是模塊的名稱,test.py test就是模塊名稱。git

什麼是包?正則表達式

包,package本質就是一個文件夾,和文件夾不同的是它有一個__init__.py文件,包是從邏輯上來組織模塊的,也就是說它是用來存放模塊的,若是你想導入其餘目錄下的模塊,那麼這個目錄必須是一個包才能夠導入。sql

導入模塊json

import module #導入模塊
from module import *  #導入該模塊中的全部方法,慎用
from module import fun as xx_fun #導入指定的方法,而後起別名
from module import fun1,fun2,fun3 #導入模塊下的多個方法
#import module,實際上就是把該模塊的代碼賦值給模塊名,也就是module.py裏面全部的代碼,賦值給了module這個變量,若是是from module import fun,就是把module打開,把module裏面的fun方法拿過來使用

導入模塊的本質,就是把python文件拿過來執行一次。windows

使用包中的模塊須要在__init__.py文件中from . import xxxdom

模塊分類:函數

標準庫:python內置的
開源模塊:第三方
自定義模塊:本身寫的spa

2、os、sys模塊

os:    import os

print(os.getcwd())#取當前工做目錄
    os.chmod("/usr/local",7)#給文件/目錄加權限
    print(os.chdir("../"))#更改當前目錄
    print(os.curdir)#當前目錄
    print(os.pardir)#父目錄
    print(os.makedirs("/usr/hehe/hehe1"))#遞歸建立文件夾,父目錄不存在時建立父目錄
    print(os.removedirs("/usr/hehe/hehe1"))#遞歸刪除空目錄
    print(os.mkdir("test1"))#建立文件夾
    print(os.rmdir("test1"))#刪除指定的文件夾
    print(os.remove("test"))#刪除文件
    print(os.listdir('.'))#列出一個目錄下的全部文件
    os.rename("test","test1")#重命名
os.system('cd ..')#輸入終端命令 print(os.stat("len_os.py"))#獲取文件信息 print(os.sep)#當前操做系統的路徑分隔符 print(os.linesep)#當前操做系統的換行符 print(os.pathsep)#當前系統的環境變量中每一個路徑的分隔符,linux是:,windows是; print(os.environ)#當前系統的環境變量 print(os.name)#當前系統名稱 print(os.path.abspath(__file__))#獲取絕對路徑 print(os.path.split("/usr/hehe/hehe.txt"))#分割路徑和文件名 print(os.path.dirname("/usr/local"))#獲取父目錄 print(os.path.basename("/usr/local"))#獲取最後一級,若是是文件顯示文件名,若是是目錄顯示目錄名 print(os.path.exists("/usr/local"))#目錄/文件是否存在 print(os.path.isabs("."))#判斷是不是絕對路徑 print(os.path.isfile("/usr/local"))#判斷是不是一個文件 print(os.path.isdir("/usr/local"))#是不是一個路徑 print(os.path.join("/root",'hehe','a.sql'))#拼接成一個路徑 print(os.path.getatime("len_os.py"))#輸出最近訪問時間 print(os.path.getmtime("len_os.py"))#輸出最近訪問時間

sys

    sys.argv           命令行參數List,第一個元素是程序自己路徑    
    sys.exit(n)        退出程序,正常退出時exit(0)
    sys.version        獲取Python解釋程序的版本信息
    sys.maxint         最大的Int值
    sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
    sys.platform       返回操做系統平臺名稱
    sys.stdout.write('please:')#向屏幕輸出一句話
    val = sys.stdin.readline()[:-1]#獲取輸入的值

3、random模塊

    import random,string    
    print(random.random())#隨機浮點數,默認取0-1,不能指定範圍
    print(random.randint(1,20))#隨機整數
    print(random.randrange(1,20))#隨機產生一個range
    print(random.choice('x23serw4'))#隨機取一個元素
    print(random.sample('hello',2))#從序列中隨機取幾個元素
    print(random.uniform(1,9))#隨機取浮點數,能夠指定範圍
    x = [1,2,3,4,6,7]
    random.shuffle(x)#洗牌,打亂順序,會改變原list的值
    print(x)
    print(string.ascii_letters+string.digits)#全部的數字和字母

4、time&datetime模塊

time和datetime模塊主要用於操做時間

時間有三種表示方式,一種是時間戳、一種是格式化時間、一種是時間元組

        import datetime,time        
        print(time.timezone)#和標準時間相差的時間,單位是s
        print(time.time())#獲取當前時間戳
        print(time.sleep(1))#休息幾s
        print(time.gmtime())#把時間戳轉換成時間元組,若是不傳的話,默認取標準時區的時間戳
        print(time.localtime())#把時間戳轉換成時間元組,若是不傳的話,默認取當前時區的時間戳
        print(time.mktime(time.localtime()))#把時間元組轉換成時間戳
        print(time.strftime("%y%m%d %H%M%S"))#將時間元組轉換成格式化輸出的字符串
        print(time.strptime("20160204 191919","%Y%m%d %H%M%S"))#將格式化的時間轉換成時間元組
        print(time.struct_time)#時間元組
        print(time.asctime())#時間元轉換成格式化時間
        print(time.ctime())#時間戳轉換成格式化時間
        print(datetime.datetime.now())#固然時間格式化輸出
        print(datetime.datetime.now()+datetime.timedelta(3))#3天后的時間
        print(datetime.datetime.now()+datetime.timedelta(-3))#3天前的時間

5、shelve模塊

shelve模塊用來持久化存儲數據,比起json來,json只能存儲list、字典這樣的數據類型,若是是一個函數,一個類的話,就沒有辦法存儲了,可是shelve模塊能夠,shelve模塊是key-value存儲的,value是你存儲的內容,使用以下

        
        import hashlib
         
        m = hashlib.md5()
        m.update(b"Hello")
        m.update(b"It's me")
        print(m.digest())
        m.update(b"It's been a long time since last time we ...")
         
        print(m.digest()) #2進制格式hash
        print(len(m.hexdigest())) #16進制格式hash
        # ######## md5 ########
         
        hash = hashlib.md5()
        hash.update('admin')
        print(hash.hexdigest())
        # ######## sha1 ########
         
        hash = hashlib.sha1()
        hash.update('admin')
        print(hash.hexdigest())
        # ######## sha256 ########
         
        hash = hashlib.sha256()
        hash.update('admin')
        print(hash.hexdigest())
         
        # ######## sha384 ########
         
        hash = hashlib.sha384()
        hash.update('admin')
        print(hash.hexdigest())
        # ######## sha512 ########
         
        hash = hashlib.sha512()
        hash.update('admin')
        print(hash.hexdigest())

7、configparser模塊

configparser模塊用來操做配置文件,用於生成和修改常見配置文檔,python 3.x 中爲configparser,python2中爲ConfigParser。

一個常見的配置文件以下:

            [DEFAULT]
            ServerAliveInterval = 45
            Compression = yes
            CompressionLevel = 9
            ForwardX11 = yes
             
            [bitbucket.org]
            User = hg
             
            [topsecret.server.com]
            Port = 50022
            ForwardX11 = no

若是想用python生成一個這樣的文檔怎麼作呢?

    import configparser
     
    config = configparser.ConfigParser()
    config["DEFAULT"] = {'ServerAliveInterval': '45',
                          'Compression': 'yes',
                         'CompressionLevel': '9'}
     
    config['bitbucket.org'] = {}
    config['bitbucket.org']['User'] = 'hg'
    config['topsecret.server.com'] = {}
    topsecret = config['topsecret.server.com']
    topsecret['Host Port'] = '50022'     # mutates the parser
    topsecret['ForwardX11'] = 'no'  # same here
    config['DEFAULT']['ForwardX11'] = 'yes'
    with open('example.ini', 'w') as configfile:
       config.write(configfile)

下面是一些經常使用的操做,修改、添加、刪除節點、屬性

    import configparser    
    config = configparser.ConfigParser()
    config.read('my.cnf')
    sections = config.sections()#獲取全部節點
    print(config.get('bitbucket.org','User'))#取對應節點下面key的值
    config.add_section('NEW')#增長節點
    config.set('NEW','test','true')#增長節點下面對應的熟悉和值
    config.set('DEFAULT','niu','222222')#修改節點下的屬性
    config.write(open("my.cnf","w"))#寫入修改後的文件
    config.has_option('NEW','test')#節點下是否有對應的屬性
    config.has_section('NEW')#是否有該節點
    config.remove_section('NEW')#刪除節點
    config.remove_option('NEW','test')#刪除節點下面的key

8、re模塊

re模塊是正則表達式模塊,用來匹配一些特定的字符串。

經常使用的正則表達式符號

        '.'     默認匹配除\n以外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
        '^'     匹配字符開頭,若指定flags MULTILINE,這種也能夠匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
        '$'     匹配字符結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也能夠
        '*'     匹配*號前的字符0次或屢次,re.findall("ab*","cabb3abcbbac")  結果爲['abb', 'ab', 'a']
        '+'     匹配前一個字符1次或屢次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb']
        '?'     匹配前一個字符1次或0次
        '{m}'   匹配前一個字符m次
        '{n,m}' 匹配前一個字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 結果'abb', 'ab', 'abb']
        '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結果'ABC'
        '(...)' 分組匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結果 abcabca456c
        '\A'    只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的
        '\Z'    匹配字符結尾,同$
        '\d'    匹配數字0-9
        '\D'    匹配非數字
        '\w'    匹配[A-Za-z0-9]
        '\W'    匹配非[A-Za-z0-9]
        's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t'

經常使用的匹配語法

        re.match 從頭開始匹配        
        re.search 匹配包含
        re.findall 把全部匹配到的字符放到以列表中的元素返回
        re.splitall 以匹配到的字符當作列表分隔符
        re.sub      匹配字符並替換
相關文章
相關標籤/搜索