Python經常使用模塊Day06

模塊\包

模塊:用力啊從邏輯組織python代碼(變量,函數,類,邏輯:實現一個功能)本質就是.py結尾的python文件,(文件名:test.py,對應的模塊名:test)

包:從邏輯上組織模塊,本質就是一個目錄(必須帶一個__init__.py文件) 

導入方法: 
import test 
import test,test1,test2…..
form test import *      不介意使用-慢 
form test import m1,m2,m3… 
from test import longer as  logger_name   快 

  

import 本質(路徑搜索和搜索路徑)
導入模塊的本質就是把python文件解釋一遍,
import test  —> test.py  ——> test.py 的路徑 —> sys.path  
 
導入包的本質就是 執行該包下的 __init__.py文件
from . import test     當前目錄導入
 
導入優化
form test import m1,m2,m3… 
from test import longer as  logger_name   快 
 
使用import 關鍵字,能夠將一個包中已出現的一個或多個函數或模塊,引入到另外一個python代碼中,從而實現 代碼的複用

注意html

  1. 若是是本地導入文件,直接使用:import filename
  2. 若是導入的是一個包,該包下面必須是有__init__.py文件才能夠導入,不然報錯,只有有了__init__.py文件,python解析器纔會把這個目錄當成是的包
模塊分類
  • 標準卡
  • 開源模塊
  • 自定義模塊 

 

readom 模塊 

 1 import random
 2 
 3 print(random.random()) #用於隨機生成一個0到1隨機浮點數
 4 print(random.randint(1,3)) #隨機(a,b) 之間的值 1<=n<=3
 5 print(random.randrange(1,3)) #隨機(a,b) 之間的值,不包含3 1<=n<3
 6 print(random.choice('hello')) #隨機取('hello')值 單個字符,可傳入元祖,列表,字符串 print(random.choice([1,2,3]))
 7 print(random.sample('hello',3))#隨機取('hello',3) hello的前3位的單個字符
 8 print(random.uniform(1,10)) #用於生成制定範圍值的一個隨機浮點數
 9 
10 #隨機密碼-數字&字母組合
11 checkcode = ''
12 for i in range(4): #循環 0,1,2,3
13     current = random.randrange(0,4)  # 隨機0,1,2,3
14     print(current,i)
15     if current == i:
16         tmp = chr(random.randint(65,90)) #ASCII碼 65-90表明A-Z
17     else:
18         tmp = random.randint(0,9)
19     checkcode +=str(tmp)
20 print(checkcode)

 

os模塊

 1 import  os
 2 
 3 print(os.getcwd())#獲取當前工做目錄
 4 os.chdir("/home") #改變當前路徑,至關於cd
 5 os.chdir(r'C:\Users')
 6 print(os.getcwd())
 7 print(os.curdir)#返回當前目錄「.」
 8 print(os.pardir)#返回上一級目錄「..」當前目錄的父目錄
 9 os.makedirs(r'/Users/chenjianguo/Desktop/charm/python/day05/a/b/c')#建立多層次遞歸目錄
10 os.removedirs(r'/Users/chenjianguo/Desktop/charm/python/day05/a/b/c') #若目錄爲空,則刪除,並遞歸到上一級目錄,以此類推(必須是存在目錄)
11 os.mkdir(r'/Users/chenjianguo/Desktop/charm/python/day05/dirmame') #建立目錄,不可遞歸
12 os.rmdir(r'/Users/chenjianguo/Desktop/charm/python/day05/dirmame') #刪除單級空目錄
13 print(os.listdir(r'/Users')) #列出指定目錄下全部文件河子目錄,包括隱藏文件,並以列表方式打印
14 os.remove(r'123.py') #刪除文件
15 print(os.stat(r'dirmame')) #獲取文件/目錄-的詳細信息
16 print(os.sep) #輸出路徑分隔符 /
17 print(os.linesep) #輸出換行分隔符
18 print(os.pathsep) #輸出冒號 :
19 os.system('ls') #執行shell命令
20 print(os.environ) #獲取系統環境變量
21 print(os.path.abspath('dirmame'))#:絕對路徑
22 print(os.path.split(r'/Users/chenjianguo/Desktop/charm/python/day05/package_test/123.py'))#: 把path分爲目錄和文件兩個部分,以列表返回
23 print(os.path.abspath(__file__)) #返回當前文件的絕對路徑
24 print(os.path.dirname(os.path.abspath(__file__))) #返回**的目錄
25 print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #屢次執行返回上一級目錄
26 print(os.path.basename(r'123.py')) #獲取文件名
27 print(os.path.exists(r'123.py')) #判斷文件是否存在,存在返回True 不存在返回False
28 print(os.path.isabs(r'/')) #若是是絕對路徑返回True 不是返回False
29 print(os.path.isfile('123.py')) #判斷是不是文件是返回True 不是發揮False
30 print(os.path.isdir('dirmame')) #判斷是不是目錄是返回True 不是發揮False
31 print(os.path.join('dirmame','123'))#: 經常使用來連接路徑
32 os.path.altsep#: 根目錄
33 os.path.curdir#:當前目錄
34 os.path.pardir#:父目錄
35 print(os.path.getatime('dirmame')) #獲取指定文件/目錄的最後存取時間
36 print(os.path.getmtime('dirmame')) #獲取指定文件/目錄的最後修改時間

 

sys模塊

1 import sys
2 # print(sys.exit())        #退出程序,正常退出時exit(0)
3 print(sys.version)        #獲取Python解釋程序的版本信息
4 # print(sys.maxint)         #最大的Int值
5 print(sys.path)           #返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
6 print(sys.platform)       #返回操做系統平臺名稱
7 print(sys.stdout.write('please:'))#寫進度條
8 val = sys.stdin.readline()[:-1] #獲取輸入值
9 print(val)

time&datetime模塊

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

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

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


如今看起來更有但願格式成咱們想要的時間了。
time.strftime('%Y-%m-%d',time.localtime(time.time()))
輸出日期和時間:
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
time.strftime裏面有不少參數,可讓你可以更隨意的輸出本身想要的東西:
下面是time.strftime的參數:
strftime(format[, tuple]) -> string
將指定的struct_time(默認爲當前時間),根據指定的格式化字符串輸出
python中時間日期格式化符號:
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12) 
%M 分鐘數(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天爲星期的開始
%w 星期(0-6),星期天爲星期的開始
%W 一年中的星期數(00-53)星期一爲星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號自己 

zipfile&tarfile模塊

 1 import zipfile
 2 # 壓縮
 3 z = zipfile.ZipFile('laxi.zip', 'w')
 4 z.write('a.log')
 5 z.write('data.data')
 6 z.close()
 7 
 8 # 解壓
 9 z = zipfile.ZipFile('laxi.zip', 'r')
10 z.extractall()
11 z.close()
12 
13 import tarfile
14 
15 # 壓縮
16 tar = tarfile.open('qunawang-test.zip','w') #壓縮包命名
17 tar.add('/Users/chenjianguo/Desktop/charm/python/qunawang', arcname='qunawang1222.zip') #壓縮文件目錄,arcname->解壓後顯示的名字
18 tar.add('/Users/chenjianguo/Desktop/charm/python/test/qunawang-test.zip', arcname='cmdb1.zip')
19 tar.close()
20 
21 # # # 解壓 /Users/chenjianguo/Desktop/charm/python/test/qunawang-test.zip
22 tar = tarfile.open('qunawang-test.zip','r')
23 tar.extractall()  # 可設置解壓地址
24 tar.close()

 

xlrd,xlwt,xlutils模塊介紹-excel操做

xlrd模塊是讀取excel

 1 import xlrd
 2 
 3 # 打開excel:新建 deme.xls文件,不然會報錯
 4 file = xlrd.open_workbook('dome.xls')
 5 # 查看文件中包含sheet的名稱:
 6 print(file.sheet_names())
 7 # 獲得第一個工做表,或者經過索引順序 或 工做表名稱
 8 sheet = file.sheets()[0]
 9 # print(sheet)
10 sheet = file.sheet_by_index(1)
11 # print(sheet)
12 sheet = file.sheet_by_name('工做表1')
13 print('sheet:',sheet)
14 # 獲取行數和列數
15 nrows = sheet.nrows
16 print('nrows:',nrows)
17 ncols = sheet.ncols
18 print('ncols:',ncols)
19 # 循環行,獲得索引的列表
20 for rownum in range(sheet.nrows):
21     print('rownum:',sheet.row_values(rownum))
22 # 獲取整行和整列的值(數組)
23 #sheet.row_values(i)
24 #sheet.col_values(i)
25 # 單元格(索引獲取)
26 cell_A1 = sheet.cell(0, 0).value
27 print(cell_A1)
28 cell_C4 = sheet.cell(1, 3).value
29 print(cell_C4)
30 # 分別使用行列索引
31 cell_A1 = sheet.row(0)[0].value
32 print(cell_A1)
33 cell_A2 = sheet.col(1)[0].value
34 print(cell_A2)

xlwt模塊是寫excel的

 1 # 導入xlwt
 2 import xlwt
 3 
 4 # 新建一個excel文件
 5 file = xlwt.Workbook()  # 注意這裏的Workbook首字母是大寫,無語吧
 6 # 新建一個sheet
 7 sheet = file.add_sheet('sheet_name',cell_overwrite_ok=True)
 8 # 寫入數據sheet.write(行,列,value)
 9 sheet.write(0, 0, 'test')
10 # 若是對一個單元格重複操做,會引起
11 #returns error:
12 # Exception: Attempt to overwrite cell:
13 # sheetname=u‘sheet 1‘ rowx=0 colx=0
14 # 因此在打開時加cell_overwrite_ok=True解決
15 # sheet = file.add_sheet('sheet name', cell_overwrite_ok=True)
16 # 保存文件
17 file.save('demo111.xls')

xlutils是用來修改excel的

 1 from xlrd import open_workbook
 2 from xlutils.copy import copy
 3 
 4 rb = open_workbook('demo111.xls')
 5 # 經過sheet_by_index()獲取的sheet
 6 rs = rb.sheet_by_index(0)
 7 # 複製一個excel
 8 wb = copy(rb)
 9 # 經過獲取到新的excel裏面的sheet頁
10 ws = wb.get_sheet(0)
11 ws.write(1, 0, 'Lily')  # 寫入excel,第一個值是行,第二個值是列
12 wb.save('szz_new.xls')  # 保存新的excel,保存excel必須使用後綴名是.xls的,不是能是.xlsx的

  Configparser 模塊

常見文檔格式以下算法

 1 [DEFAULT]
 2 ServerAliveInterval = 45
 3 Compression = yes
 4 CompressionLevel = 9
 5 ForwardX11 = yes
 6  
 7 [bitbucket.org]
 8 User = hg
 9  
10 [topsecret.server.com]
11 Port = 50022
12 ForwardX11 = no

新建example.ini 格式文件shell

 1 import  configparser
 2 #生成一個 configparser對象
 3 config = configparser.ConfigParser()
 4 
 5 config['DEFAULT'] = {'ServerAliverInterval':'45', #節點-指定對象  --key  valuer
 6                      'Compression':'yes',
 7                      'CompersionLevel':'9'}
 8 config['bitbucket.org'] = {} #空節點
 9 config['bitbucket.org']['User'] = 'hg'
10 
11 config['topsecret.server.com'] = {}
12 topsecret = config['topsecret.server.com']  #賦值-方便操做
13 topsecret['Host Port'] = '50022'
14 topsecret['ForwardXll'] = 'no'
15 
16 config['DEFAULT']['ForwardXll'] = 'yes'
17 #寫入文件 example.ini
18 with open('example.ini','w') as configfile:
19     config.write(configfile)

configparser 讀取編程

1 import configparser
2 
3 config = configparser.ConfigParser()
4 config.read('example.ini') #讀取文件
5 
6 print(config.defaults()) #讀取文件頭結點
7 print(config['bitbucket.org']['user'])  #讀取結點下的內容['bitbucket.org']['user']
8 print(config.sections()) #讀取結點

configparser 刪除-數據修改數組

 1 import  configparser
 2 
 3 config = configparser.ConfigParser()
 4 config.read('example.ini')
 5 
 6 secs = config.sections()
 7 print(secs)
 8 options = config.options('topsecret.server.com') #讀取結點
 9 print(options)
10 item = config.items('topsecret.server.com') #讀取結點內容
11 config.set('bitbucket.org','hg','111') #增長節點下的數據hg=111
12 config.write(open('i.cfg','w'))
13 
14 #刪除bitbucket.org節點
15 sec = config.add_section('IPADD') #增長節點
16 # sec = config.has_section('IPADD') #刪除節點
17 # sec = config.remove_section('bitbucket.org') #刪除結點
18 config.remove_option('bitbucket.org','user') #刪除結點下的數user數據
19 config.write(open('example.cfg','w'))

 

hashlib模塊

hashlib模塊,主要用於加密相關的操做,在python3的版本里,代替了md5和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法dom

 1 import hashlib
 2 # ######## md5 ########
 3 
 4 hash = hashlib.md5()
 5 hash.update(b'admin')
 6 print(hash.hexdigest())
 7 print(hash.digest())  # 2進制格式hash
 8 print(len(hash.hexdigest()))  # 16進制格式hash
 9 
10 # ######## sha1 ########
11 
12 hash = hashlib.sha1()
13 hash.update(b'admin')
14 print(hash.hexdigest())  # 16進制格式顯示
15 
16 # ######## sha256 ########
17 
18 hash = hashlib.sha256()
19 hash.update(b'admin')
20 print(hash.hexdigest())
21 
22 # ######## sha384 ########
23 
24 hash = hashlib.sha384()
25 hash.update(b'admin')
26 print(hash.hexdigest())
27 
28 # ######## sha512 ########
29 
30 hash = hashlib.sha512()
31 hash.update(b'admin')
32 print(hash.hexdigest())

更多關於md5,sha1,sha256等介紹的文章看這裏https://www.tbs-certificates.co.uk/FAQ/en/sha256.html編程語言

 

 

資料補充

re模塊- 經常使用正則表達式符號

 1 '.'     默認匹配除\n以外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
 2 '^'     匹配字符開頭,若指定flags MULTILINE,這種也能夠匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
 3 '$'     匹配字符結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也能夠
 4 '*'     匹配*號前的字符0次或屢次,re.findall("ab*","cabb3abcbbac")  結果爲['abb', 'ab', 'a']
 5 '+'     匹配前一個字符1次或屢次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb']
 6 '?'     匹配前一個字符1次或0次
 7 '{m}'   匹配前一個字符m次
 8 '{n,m}' 匹配前一個字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 結果'abb', 'ab', 'abb']
 9 '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結果'ABC'
10 '(...)' 分組匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結果 abcabca456c
11  
12  
13 '\A'    只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的
14 '\Z'    匹配字符結尾,同$
15 '\d'    匹配數字0-9
16 '\D'    匹配非數字
17 '\w'    匹配[A-Za-z0-9]
18 '\W'    匹配非[A-Za-z0-9]
19 ‘\s'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t'
20  
21 '(?P<name>...)' 分組匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 結果{'province': '3714', 'city': '81', 'birthday': '1993'}

最經常使用的匹配語法函數

1 re.match 從頭開始匹配
2 re.search 匹配包含
3 re.findall 把全部匹配到的字符放到以列表中的元素返回
4 re.splitall 以匹配到的字符當作列表分隔符
5 re.sub      匹配字符並替換 

反斜槓的困擾
與大多數編程語言相同,正則表達式裏使用"\"做爲轉義字符,這就可能形成反斜槓困擾。假如你須要匹配文本中的字符"\",那麼使用編程語言表示的正則表達式裏將須要4個反斜槓"\\\\":前兩個和後兩個分別用於在編程語言裏轉義成反斜槓,轉換成兩個反斜槓後再在正則表達式裏轉義成一個反斜槓。Python裏的原生字符串很好地解決了這個問題,這個例子中的正則表達式可使用r"\\"表示。一樣,匹配一個數字的"\\d"能夠寫成r"\d"。有了原生字符串,你不再用擔憂是否是漏寫了反斜槓,寫出來的表達式也更直觀。
 1 import re
 2 res = re.match('^chen\d+','chen123jianguo') #^匹配,\d匹配數字,+出現一次或屢次 match從頭讀取
 3 print(res.group())
 4 res = re.match('^.+\d','chen123jianguo') #.匹配一個字符
 5 print(res.group())
 6 res = re.search('j.+o','chen123jianguo321') #search 讀取整個文件 從J開的讀取 .+匹配全部字符--到o 結束
 7 print(res.group())
 8 res = re.search('j[a-zA-Z]+\d+[A-Za-z]+','chen123jianguo321Jianguo') #[a-z] a到z出現的字符
 9 print(res.group())
10 res = re.search('c?','cchen123jianguo321Jianguo') # ?匹配a出現1次或者0次  ccl ?--> chenccl&cchenccl&cclhenccl =ccl&cc&ccl
11 print(res.group())
12 res = re.search('[0-9]{3}','chen1jian2guo334aa') #{3} 匹配3個  334  {1,3} 1到3
13 print(res.group())
14 res = re.findall('[0-9]{1,3}','chen1jian2guo334aa') #findall 查找所有['1', '2', '334'] 沒有group方法  只能在命令行執行
15 print(res.group())
16 res = re.search('abc|ABC','abcABCchen1jian2guo334aa') # |->或  匹配管道符 | 倆邊   findall 查找所有
17 print(res.group())
18 res = re.search('(abc){2}','alexabcabccc')   #()組合匹配 (abc)匹配abc  倆次{2}
19 print(res.group())
20 res = re.search('(abc){2}\|','alexabcabc|cc')   #  \ -->轉譯  不把|看作管道符操做abcabc|
21 print(res.group())
22 res = re.search('(abc){2}(\|\|=){2}','alexabcabc||=||=cc')   #  \ -->轉譯  雙||都須要轉譯
23 print(res.group())
24 res = re.search('\D+','2312# @#@312') # \D 匹配非數字的 特殊字符 \w匹配[A-Za-z0-9] \W匹配非[A-Za-z0-9]
25 print(res.group())
26 res = re.search('\s+','2312# \r\n@#@312') # 匹配空白字符、\t、\n、\r 命令行展現效果
27 print(res.group())
28 res = re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242")
29 print(res.groupdict()) #res.groupdict("city")     {'province': '3714', 'city': '81', 'birthday': '1993'}
30 res = re.split('[0-9]','abc1ef33ef11') #['abc', 'ef', '', 'ef', '', '']  split分割-命令行執行
31 print(res)
32 res = re.sub('[0-9]+','|','abc1ef33ef11') #sub 替換 'abc|ef|ef|'  命令行執行
33 print(res)
34 res = re.sub('[0-9]+','|','abc1ef33ef11',count=2) #sub 替換 前2個   'abc|ef|ef11'   命令行執行
35 print(res)
36 res = re.search('[a-z]+','abcA',flags=re.I) #re.I忽略大小寫
37 print(res.group())
38 res = re.search(r'.+','abcA\nbcd\nfffd',flags=re.S) #re.M 點任意匹配模式,改變'.'的行爲
39 print(res.group())
40 print(res)
相關文章
相關標籤/搜索