標籤:日期格 fsync 執行時間 lis lib 搜尋 字串長度 rect 邏輯
常用模組:
1.time和datetime模組;
2.random模組;
3.os、sys和shutil模組;
4.json、pickle和shelve模組;
5.xml和ymal處理;
6.configparser和sbuprocess模組;
7.hashlib模組;
8.collections模組;
模組和包
1.概念
- 模組用來從邏輯上組織python代碼(變數、函數、類,邏輯:實現某個功能),其本質就是以.py結尾的python檔案。(例如:檔案:test.py,對應的模組名:test);
- 包:用來從邏輯上組織模組,其本質就是一個目錄(必須帶有一個__init__.py檔案);
2.匯入方法
- import module_name:本質是將module_name解釋一遍,並將解釋結果賦值給module_name;
- from module_name import name:本質將module_name中的name變數放到當前程式中運行一邊,所以調用的時候直接print(name)就可以列印出name變數的值,切記調用模組的時候只需要import模組名,不需要加.py;
- import module_name1, module_name2,...:匯入多個模組;
- from module_name import name as nm:為匯入模組取別名;
- from module_name import *(不建議使用該方法);
3.匯入模組的本質就是把python檔案解釋一遍
import module_name ---> module_name.py ---> module_name.py的路徑--->sys.path;
4.匯入包的本質就是執行該包下面的__init__.py檔案,所以如果想要調用包下面的python程式需要在包下的__init__.py匯入需要的程式;
1.time與datetime模組
python中常見的時間表示方法:
a.時間戳記;
b.格式化的時間字串;
c.struct_time(元組);
time模組方法(來自於原始碼):
import time# 時間戳記:返回從1970年1月1日00:00:00到現在為止的時間(單位為秒)time_time = time.time()print("time_time is %s" % time_time)# struct time:返回UTC時間的struct格式;如果沒有傳參,則轉換目前時間gm_time = time.gmtime(time_time)print("gm_time is {}".format(gm_time))# struct time:返回本地時間的struct格式;如果沒有傳參,則轉換目前時間local_time = time.localtime()print("local_time is {}".format(local_time))# 返回處理器時間,3.3開始廢棄,改成time.process_time()測量處理器運算時間,不穩定,mac上測不出來clock_time = time.clock()print("clock_time is {}".format(clock_time))# 返回進程已耗用時間process_time = time.process_time()print("process_time is {}".format(process_time))# 順延強制時間,單位為秒;該函數無傳回值sleep_time = time.sleep(2)print("sleep time is {}".format(sleep_time))# 返回與UTC時間的時間差,以秒計算alt_zone = time.altzoneprint("alt_zone is {}".format(alt_zone))# 返回時間格式為:Fri May 4 14:54:43 2018;如果傳參,則轉換參數;否則轉換目前時間;參數為時間元組asc_time = time.asctime()print("asc_time is {}".format(asc_time))# 返回時間格式為:Fri May 4 14:57:19 2018;如果傳參,則轉換參數;否則轉換目前時間;參數為秒c_time = time.ctime()print("c_time is {}".format(c_time))# 返回時間戳記:將struct時間對象轉成時間戳記mk_time = time.mktime(time.localtime())print("mk_time is {}".format(mk_time))# 返回字串時間:將UTC struct_time格式轉成指定的字串格式時間strf_time = time.strftime("%d: %m: %Y %H: %M: %S", time.gmtime())print("strf_time is {}".format(strf_time))# 返回struct_time時間:將字串時間轉成struct_time格式時間strp_time = time.strptime("2018-05-04", "%Y-%m-%d")print("strp_time is {}".format(strp_time))
相互之間的轉換關係如下:
格式化參數說明:
%Y Year with century as a decimal number. %m Month as a decimal number [01,12]. %d Day of the month as a decimal number [01,31]. %H Hour (24-hour clock) as a decimal number [00,23]. %M Minute as a decimal number [00,59]. %S Second as a decimal number [00,61]. %z Time zone offset from UTC. %a Locale‘s abbreviated weekday name. %A Locale‘s full weekday name. %b Locale‘s abbreviated month name. %B Locale‘s full month name. %c Locale‘s appropriate date and time representation. %I Hour (12-hour clock) as a decimal number [01,12]. %p Locale‘s equivalent of either AM or PM. %% A literal "%" character.
datetime模組介紹:
1.datetime模組包含如下類:
| 類名 |
功能說明 |
| date |
日期對象,常用的屬性有year,month,day |
| time |
時間對象 |
| datetime |
日期時間對象,常用的屬性有hour,minute,second,microsecond |
| timedelta |
時間間隔,即兩個時間點之間的長度 |
| timezone |
時區 |
| tzinfo |
時區資訊對象 |
2.datetime模組中包含的常量
| 常量 |
功能說明 |
用法 |
傳回值 |
| MAXYEAR |
返回能表示的最大年份 |
datetime.MAXYEAR |
9999 |
| MINYEAR |
返回能表示的最小年份 |
datetime.MINYEAR |
1 |
3.時間加減
import datetime print(datetime.datetime.now()) # 返回 2016-08-19 12:47:03.941925print(datetime.date.fromtimestamp(time.time()) ) # 時間戳記直接轉成日期格式 2016-08-19print(datetime.datetime.now() )print(datetime.datetime.now() + datetime.timedelta(3)) # 目前時間+3天print(datetime.datetime.now() + datetime.timedelta(-3)) # 目前時間-3天print(datetime.datetime.now() + datetime.timedelta(hours=3)) # 目前時間+3小時print(datetime.datetime.now() + datetime.timedelta(minutes=30)) # 目前時間+30分c_time = datetime.datetime.now()print(c_time.replace(minute=3,hour=2)) # 時間替換
如下簡圖所示(註:途中有個小錯誤,時間元組是7個元組):
2.random模組
1.random模組的基本方法:
import randomprint(random.random()) # 隨機產生[0, 1)之間的浮點數print(random.randint(1, 10)) # 隨機產生[a, b]範圍的整數,包括端點print(random.randrange(0, 100, 2)) # 隨機產生[a, b)範圍指定步長的數(2---偶數)# random.choice:從非空序列中隨機播放一個元素print(random.choice("hello")) # 隨機產生指定字串中的元素print(random.choice([1, 3, 5, 2, 4, 6])) # 隨機產生指定列表中的元素print(random.choice(("abc", "123", "liu", 555))) # 隨機產生指定元組中的元素print(random.sample("hello", 3)) # 隨機產生指定序列的指定個數的元素print(random.uniform(1, 10)) # 隨機產生指定區間的浮點數# 洗牌功能items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]print("洗牌前:", items)random.shuffle(items)print("洗牌後:", items)
運行輸出結果為:
0.4690573091913972364l4123[‘l‘, ‘h‘, ‘l‘]5.548564168880079洗牌前: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]洗牌後: [8, 2, 9, 3, 6, 0, 4, 1, 7, 5]
2.random模組方法實際應用:產生隨機驗證碼
(1)產生隨機4位元字驗證碼
# 產生隨機4位元字驗證碼check_code = "" # 最終產生的驗證碼for num in range(4): current = random.randint(0, 9) check_code += str(current)print(check_code) # 運行輸出結果為:7345
(2)產生隨機4位字串驗證碼(數字+字元)
# 產生隨機4位字串驗證碼(數字+字元)check_code = "" # 最終產生的驗證碼for i in range(4): cur = random.randrange(0, 4) # 隨機猜的範圍 # 隨機猜的範圍與迴圈次數相等,取字母 if cur == i: temp = chr(random.randint(65, 90)) # 隨機取一個字母 else: temp = random.randint(0, 9) check_code += str(temp)print(check_code) # 運行輸出結果為:K666
3.os、sys和shutil模組
1.os模組提供了非常豐富的方法來處理檔案和目錄,常用的方法如下所示::
os.access(path, mode):檢驗許可權模式os.chdir(path):改變當前工作目錄os.chflags(path, flags):設定路徑的標記為數字標記os.chmod(path, mode):更改許可權os.chown(path, uid, gid):變更檔所有者os.chroot(path):改變當前進程的根目錄os.close(fd):關閉檔案描述符fdos.closerange(fd_low, fd_high):關閉所有檔案描述符,從fd_low(包含)刀fd_high(不包含),錯誤會忽略os.dup(fd):複製檔案描述符fdos.dup2(fd, fd2):將一個檔案描述符fd複製到另一個fd2os.fchdir(fd):通過檔案描述符改變當前工作目錄os.fchmod(fd, mode):改變一個檔案的存取權限,該檔案由參數fd指定,參數mode是Unix下的檔案存取權限os.fchown(fd, uid, gid):修改一個檔案的所有權,這個函數修改一個檔案的使用者ID和使用者組ID,該檔案由檔案描述符fd指定os.fdatasync(fd):強制將檔案寫入磁碟,該檔案由檔案描述符fd指定,但是不強制更新檔案的狀態資訊os.fdopen(fd[, mode[, bufsize]]):通過檔案描述符fd建立一個檔案對象,並返回這個檔案對象os.fpathconf(fd, name):返回一個開啟的檔案的系統配置資訊os.fstat(fd):返迴文件描述符fd的狀態,像stat()os.fstatvfs(fd):返回包含檔案描述符fd的檔案的檔案系統的資訊,像statvfs()os.fsync(fd):強制將檔案描述符為fd的檔案寫入硬碟os.ftruncate(fd, length):裁剪檔案描述符為fd對應的檔案,所以它最大不能超過檔案大小os.getcwd():返回當前工作目錄os.getcwdu():返回當前工作目錄的Unicode對象os.isatty(fd):如果檔案描述符fd是開啟的,同時與tty(-like)裝置相連,則返回true,否則返回falseos.lchflags(path, flags):設定路徑的標記為數字標記,類似chflags(),但是沒有軟串連os.lchmod(path, mode):修改串連檔案許可權os.lchown(path, uid, gid):變更檔所有者,類似chown,但是不追蹤連結os.link(src, dst):建立永久連結,名為參數dst,指向srcos.listdir(path):返回path指定的檔案夾包含的檔案或檔案夾的名稱列表os.lseek(fd, pos, how):設定檔案描述符fd當前位置pos,how修改方式:SEEK_SET或者0:從檔案開始計算pos;SEEK_CUR或者1:從當前位置計算;SEEK_END或者2:從檔案尾部開始;os.lstat(path):像stat(),但是沒有軟串連os.major(device):從原始的裝置號中提取裝置major號碼(使用stat中的st_dev或者st_rdev field)os.makedev(major, minor):以major和minor裝置號組成一個原始裝置號os.makedirs(path[, mode]):遞迴檔案夾建立函數,像mkdir(),但建立的所有intermediate-level檔案夾需要包含子檔案夾os.minor(device):從原始裝置號中提取裝置minor號碼(使用stat中的st_dev或者st_rdev field)os.mkdir(path[, mode]):以數字mode的mode建立一個名為path的檔案夾,預設的mode是0777(八進位)os.mkfifo(path[, mode]):建立具名管道,mode為數字預設為0666(八進位)os.mknod(filename[, mode=0600, device):創一個名為filename檔案系統節點(檔案,裝置特別檔案名稱或者命名pipe)os.open(file, falgs[, mode]):開啟一個檔案,並且設定需要開啟的選項,mode參數是可選的os.openpty():開啟一個新的偽終端對,返回pty和tty的檔案描述符os.pathconf(paht, name):返回相關檔案的系統配置資訊os.pipe():建立一個管道,返回一對檔案描述符(r, w)分別為讀和寫os.popen(command[, mode[, bufsize]]):從一個command開啟一個管道os.read(fd, n):從檔案描述符fd中讀取最多n個位元組,返回包含讀取位元組的字串,檔案描述符fd對應檔案已到達結尾,返回Null 字元串os.readlink(path):返回軟串連所指向的檔案os.remove(path):刪除路徑為path的檔案,如果是一個檔案夾,將拋出OSError;查看下面的rmdir()刪除一個directoryos.removedirs(path):遞迴刪除目錄os.rename(src, dst):重新命名檔案或目錄,從src到dstos.renames(old, new):遞迴地對目錄進行更名,也可對檔案進行更名os.rmdir(path):刪除path指定的空目錄,如果目錄非空,則拋出OSErrot異常os.stat(path):擷取path指定的路徑資訊,功能等同於C API中的stat()系統調用os.stat_float_times([newvalue]):決定stat_result是否以float對象顯示時間戳記os.statvfs(path):擷取指定路徑的檔案系統統計資訊os.symlink(src, dst):建立一個軟串連os.tcgetpgrp(fd):返回與終端fd(一個由os.open()返回的開啟的檔案描述符)關聯的進程組os.tcsetpgrp(fd, pg):設定與終端fd(一個由os.open()返回的開啟的檔案描述符)關聯的進程組為pgos.tempnam([dir, [prefix]]):返回唯一的路徑名用於建立臨時檔案os.tmpfile():返回一個開啟的模式為(w+b)的檔案對象,該檔案對象沒有檔案夾入口,沒有檔案描述符,將會自動刪除os.tmpnam():為建立一個臨時檔案返回一個唯一的路徑os.ttyname(fd):返回一個字串,它表示與檔案描述符fd關聯的終端裝置,如果fd沒有與終端裝置關聯,則引發一個異常os.unlink(path):刪除檔案路徑os.utime(path, times):返回指定的path檔案的訪問和修改的時間os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]):輸出在檔案夾中的檔案名稱通過在樹中遊走,向上或向下os.write(fd, str):寫入字串到檔案描述符fd中,返回實際寫入的字串長度
2.sys模組常用函數:
sys模組常見函數:sys.argv:實現從程式外部向程式傳遞參數,第一個元素是程式本身路徑sys.exit([arg]):程式中的推出,arg=0為正常退出sys.getdefaultencoding():擷取系統當前編碼,一般預設為ASCIIsys.setdefaultencoding():設定系統預設編碼,執行dir(sys)時不會看到這個方法,再解譯器中執行不通過,可以先執行reload(sys),再執行setdefaultencoding("utf-8"),此時將系統預設編碼設定為utf-8sys.getfilesystemencoding():擷取檔案系統使用編碼方式sys.path:擷取指定模組搜尋路徑的字串集合,可以將寫好的模組放在得到的某個路徑下,就可以在程式中import時正確找到sys.platform:擷取當前系統平台sys.version:擷取python解譯器版本資訊sys.stdin,sys.stdout,sys.stderr:標準I/O流對應的對象
3.shutil模組:
shutil:進階的檔案、檔案夾、壓縮包處理模組
shutil.copyfileobj(fsrc, fdst[, length]):將檔案內容拷貝到另一個檔案中,copyfileobj方法只會拷貝檔案內容shutil.copyfile(src, dst):拷貝檔案,copyfile只拷貝檔案內容shutil.copy(src, dst):拷貝檔案和許可權shutil.copy2(src, dst):拷貝檔案和狀態資訊shutil.copymode(src, dst):僅拷貝許可權,內容、組、使用者均不變,前提是dst檔案存在,否則產生異常shutil.copystat(src, dst):僅拷貝狀態資訊,即檔案屬性,包括:mode bits、atime、mtime、flagsshutil.ignore_patterns(*patterns):忽略某個檔案,有選擇性的拷貝shutil.copytree(src, dst, symlinks=Flase, ignore=None):遞迴的去拷貝檔案shutil.rmtree(path[, ignore_errors[, onerror]]):遞迴的刪除檔案shutil.move(src, dst):遞迴的移動檔案,類似mv命令,其實就是重新命名shutil.make_archive(base_name, format, ...):建立壓縮包並返迴文件路徑,例如:zip、tarbase_name:壓縮包的檔案名稱,也可以是壓縮包的路徑。只是檔案名稱時,則儲存至目前的目錄,否則儲存至指定路徑如:www=>儲存至當前路徑 如:/Users/alex/www => 儲存至/Users/alexformat:壓縮包種類,"zip","tar","bztar","gztar"root_dir:要壓縮的檔案夾路徑(預設目前的目錄)owner:使用者,預設目前使用者group:組,預設當前組logger:用於記錄日誌,通常時logging.Logger對象
import shutil# 將 C:\Downloads\test 下的檔案打包放置當前程式目錄res1 = shutil.make_archive("wwwwwwwwww", ‘gztar‘, root_dir=‘C:\\Downloads\\test‘)# 將 C:\Downloads\test 下的檔案打包放置 \Users\mydir目錄(目前的目錄)res2 = shutil.make_archive("/Users/mydir/wwwwwwwwww", ‘gztar‘, root_dir=‘C:\\Downloads\\test‘)
在Python的底層,shutil對壓縮包的處理是調用ZipFile和TarFile兩個模組來進行處理的,詳解:
import zipfile# 壓縮z_file = zipfile.ZipFile("test.zip", "w")z_file = write("a.log")z_file = write("data.date")z_file.close()# 解壓z_unfile = zipfile.ZipFile("test.zip", "r")z_unfile.extractall()z_unfile.close()
import tarfile# 壓縮tar_in = tarfile.open("my.tar", "w")tar_in.add("C:\\Users\\bbs.log", arcname="bbs.log")tar_in.add("C:\\Users\\cmdb.log", arcname="cmdb.log")tar_in.close()# 解壓tar_out = tarfile.open("my.tar", "r")tar_out.extractall() #可設定解壓地址tar_out.close()
4.json、pickle和shelve模組
Python 常用模組