8、模塊和包

1、模塊(modue)的概念

  在Python中,一個.py文件就稱之爲一個模塊(Module)python

  模塊一共三種:

    1.python標準庫

    2.第三方模塊

    3.自定義模塊

2、模塊導入

  被導入的模塊,需與當前文件處於同一個文件夾下,纔可以使用相對路徑導入,不然報錯正則表達式

  (sys.path存儲了當前文件的路徑以及標準庫模塊的路徑)shell

  一、import  module1[, module2[,... moduleN]

      import testbash

      實質是:先獲得test------>與path中的環境變量組成一個絕對路徑------>導入文件內容------>執行文件所有內容dom

  二、from  modname import name1[, name2[, ... nameN]]

      from test import add函數

      從模塊中導入部分函數spa

      from dict1 import test操作系統

        從文件夾dict1中導入test.py文件命令行

      實質是:先獲得dict1\test.py------>與path中的環境變量組成一個絕對路徑------>導入文件內容------>執行文件所有內容code

  三、from  modname import *

      導入模塊中全部函數,但須注意,導入的函數若是和當前文件中的函數有重名現象,其中一個會被覆蓋掉,先定義的被覆蓋掉

  請注意,每個包目錄下面都會有一個__init__.py的文件,這個文件是必須存在的,不然,Python就把這個目錄當成普通目錄(文件夾),而不是一個包。      

  __init__.py能夠是空文件,也能夠有Python代碼,由於__init__.py自己就是一個模塊,而它的模塊名就是對應包的名字

   調用包就是執行包下的__init__.py文件

    不管1仍是2,首先經過sys.path找到test.py,而後執行test腳本(所有執行),區別是1會將test這個變量名加載到名字空間,而2只會將add這個變量名加載進來

3、time模塊

 一、 三種時間表示:

  • 時間戳(timestamp) :         時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。運行「type(time.time())」,返回的是float類型。
  • 格式化的時間字符串
  • 元組(struct_time)   :         struct_time元組共有9個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天,夏令時)

 

import time
 
time.time()           #時間戳1473525444.037215
time.localtime()      #struct_time
gmtime()              #將一個時間戳轉換爲UTC時區(0時區)的struct_time

 

4、random模塊

  random.random()                   #(0,1)----float

  random.randint(1,3)               #[1,3]----int

  random.randrange(1,3)             #[1,3)

  random.choice([1,'23',[4,5]])     #N選一

  random.sample([1,'23',[4,5]],2)   #N選二

  random.uniform(1,3)               #1和3之間浮點型數據

  random.shuffle(item)          #打亂item元素的順序

#練習~四位驗證碼
import random
def aaa():
    rec=''
    for i in range(4):
        a=random.randint(0,9)
        b=chr(random.randint(65,90))
        c=chr(random.randint(97,122))
        rec+=str(random.choice([a,b,c]))
    print(rec)
aaa()

 

5、OS模塊

os.getcwd()                         獲取當前工做目錄,即當前python腳本工做的目錄路徑
os.chdir("dirname")            改變當前腳本工做目錄;至關於shell下cd
os.curdir                  返回當前目錄: ('.')
os.pardir                  獲取當前目錄的父目錄字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多層遞歸目錄
os.removedirs('dirname1')        若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推
os.mkdir('dirname')            生成單級目錄;至關於shell中mkdir dirname
os.rmdir('dirname')            刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname
os.listdir('dirname')           列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印
os.remove()                刪除一個文件
os.rename("oldname","newname")     重命名文件/目錄
os.stat('path/filename')        獲取文件/目錄信息
os.sep                    輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/"
os.linesep                  輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n"
os.pathsep                 輸出用於分割文件路徑的字符串 win下爲;,Linux下爲:
os.name                    輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
os.system("bash command")        運行shell命令,直接顯示
os.environ                 獲取系統環境變量
os.path.abspath(path)         返回path規範化的絕對路徑 os.path.split(path)          將path分割成目錄和文件名二元組返回 os.path.dirname(path)         返回path的目錄。其實就是os.path.split(path)的第一個元素 os.path.basename(path)        返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素 os.path.exists(path)         若是path存在,返回True;若是path不存在,返回False os.path.isabs(path)          若是path是絕對路徑,返回True os.path.isfile(path)         若是path是一個存在的文件,返回True。不然返回False os.path.isdir(path)          若是path是一個存在的目錄,則返回True。不然返回False os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略 os.path.getatime(path)        返回path所指向的文件或者目錄的最後存取時間 os.path.getmtime(path)       返回path所指向的文件或者目錄的最後修改時間

6、sys模塊

sys.argv           命令行參數List,第一個元素是程序自己路徑

sys.exit(n)        退出程序,正常退出時exit(0)

sys.version        獲取Python解釋程序的版本信息

sys.maxint         最大的Int

sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值

sys.platform       返回操做系統平臺名稱

#進度條
import sys,time
for i in range(10):
    sys.stdout.write('#')
    time.sleep(1)
    sys.stdout.flush()

 7、re模塊

  1. 元字符

    .     匹配任意字符,除了換行符

    ^    匹配字符串的開頭

    $    匹配字符串的末尾

    *     匹配0個或多個的表達式

    +    匹配1個或多個的表達式

    ?    轉爲非貪婪模式

    e{ n}   匹配n個前面表達式

    e{ n,}  匹配n或無窮個前面表達式

    e{ n, m}   匹配n到m個前面表達式

    |      或

    \w     匹配數字字母下劃線

    \W    匹配非數字字母下劃線

    \s    匹配任意空白字符,等價於 [\t\n\r\f]

    \S    匹配任意非空字符

    \d    匹配任意數字

    \D    匹配任意非數字

    \b    匹配一個單詞邊界,也就是指單詞和空格間的位置

import re
ret=re.findall('c\l','abc\le')
print(ret)   #[]
ret=re.findall('c\\l','abc\le')
print(ret)   #[]
ret=re.findall('c\\\\l','abc\le')
print(ret)   #['c\\l']
ret=re.findall(r'c\\l','abc\le')
print(ret)   #['c\\l']

由於表達式爲'c\\\\l'時,先傳給python解釋器,解釋器獲得‘c\\l’,再將‘c\\l’傳給re解釋器,解釋器獲得‘c\l’
r'c\\l'表示傳給re解釋器的就是‘c\\l’

2. 元字符之分組

ret=re.search('(?P<id>\d{2})/(?P<name>\w{3})','23/com')
print(ret.group())       #23/com
print(ret.group('id'))   #23

3. re模塊經常使用方法

  findall( )   返回全部知足匹配條件的結果,放在列表裏

  search( )  在字符串內查找匹配,只找到第一個匹配的對象,該對象可經過調用group()方法獲得匹配的字符串,若是字符串沒有匹配,則返回None

  match( )    同search,但只在字符串開始處進行匹配

  split('[ab]','abcd')       先按'a'分割獲得''和'bcd',在對''和'bcd'分別按'b'分割

aaa=re.split('[ab]','abdfeaabcc')    
print(aaa)

#['','','dfe','','','cc']

  sub('\d','aaa','sgee43jisg55',2)   將字符串中的數字替換爲aaa,且替換2次 #sgeeaaaaaajisg55

  compile函數:

     用於編輯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用

pattern = re.compile(r'\d+')                #將正則表達式賦值給變量,方便後續重複使用
m = pattern.match('one12twothree34four') 
m = pattern.match('one123456786666e34four', 2, 10) # 從‘e’的位置開始匹配匹配到8結束,沒有匹配
m=pattern.match('sds128545585sgegsgegw',3,6)   #從1匹配到8
#<_sre.SRE_Match object; span=<3,6>,match='128'>

  finditer() 字符串中找到正則表達式所匹配的全部子串,並把它們做爲一個迭代器返回

import re
it = re.finditer(r"\d+","12a32bc43jf3") 
for match in it: 
    print (match.group() )
#12
#32
#43
#3
相關文章
相關標籤/搜索