之前有小伙伴留言分享,希望可以更新寫關(guān)于Python OS模塊和SYS模塊方面的文章,今天小七特地給大家整理了下噢,有需要的建議可以收藏起來喔~ 1 一、模塊介紹 1. 定義: 模塊:本質(zhì)就是.py結(jié)尾的python文件(文件名:test.py,對應的模塊名:test) 用來從邏輯上組織python代碼(變量,函數(shù),類,邏輯:實現(xiàn)一個功能) 2. 語法: · import 語句 當解釋器遇到import語句,如果模塊在當前的搜索路徑就會被導入。搜索路徑是一個解釋器會先進行搜索的所有目錄的列表。 導入模塊: 1、 import module1[, module2[,... moduleN] 調(diào)用符號:. 1、import os 2、print(os.sep) 3、print(os.getcwd()) · From…import 語句 Python的from語句讓你從模塊中導入一個指定的部分到當前命名空間中。語法如下: 1、from modname import name1[, name2[, ... nameN]] From…import* 語句 把一個模塊的所有內(nèi)容全都導入到當前的命名空間也是可行的,只需使用如下聲明: 1、from modname import * 這提供了一個簡單的方法來導入一個模塊中的所有項目。慎用 from…import *。 · import 和 from 的區(qū)別: import導入使用時,加前綴 module.func()。相當于把模塊代碼放在當前文件中執(zhí)行一遍。 from可以指定需要的函數(shù)或變量導入。 導入模塊和當前py文件都有同一個函數(shù),調(diào)用會調(diào)用哪一個? 因為python是解釋型,所以后面覆蓋前面。 · from … import … as … 3. import本質(zhì) import 本質(zhì): 導入一個模塊本質(zhì)就是解釋執(zhí)行一個python文件 導入一個包本質(zhì)就是解釋該包下的__init__.py文件 1、module = all_code(所有代碼) 2、import :本質(zhì)把模塊所有代碼解釋一遍,復制給模塊名 3、from module import name :把這個模塊的代碼把哪一部分給解釋了,賦值給name · __init__.py 包:本質(zhì)就是一個目錄(必須帶有一個__init__.py文件),用來從邏輯上組織模塊 導入包,怎么導入? 導入包的本質(zhì):執(zhí)行包下面的__init__.py文件 導入包下的模塊 包下面的模塊,這樣調(diào)用是錯誤的 在__init__.py內(nèi)容中導入模塊 1、from . import module 2、# '.' 指的相對路徑,指的誰的相對路徑?__init__.py的相對路徑還是調(diào)用init的那個模塊的 3、指的是__init__.py的相對路徑。 4、路徑搜索和搜索路徑 上面提到的都是導入同級目錄下的模塊,如果不在同一個目錄下: import module_name實際找module_name.py文件,是文件就一定要有路徑。 導入模塊就是:找到.py文件的位置,把它執(zhí)行一遍,從哪里找呢?sys.path. 1、>>> import sys 2、 >>> sys.path['', 3、'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\python35.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\lib\\site-packages'] 1、sys.path.append() :追加到最后 2、# 所以:可以如下,動態(tài)添加路徑到第一 3、sys.path.insert 5. 導入優(yōu)化 1、import module_test 2、# import導入情況,如果重復調(diào)用,python就會重復找,避免重復找,可以用from方式導入 3、from module_test import test 6. 阻止屬性導入 如果你不想讓某個模塊屬性被 “from module import *” 導入 , 那么你可以給你不想導入的屬性名稱加上一個下劃線( _ )。 不過如果你導入了整個模塊或是你顯式地導入某個屬性這個隱藏數(shù)據(jù)的方法就不起作用了。 02 二、模塊的分類 a:標準庫 b:開源模塊-第三方模塊 c:自定義模塊 03 三、常用內(nèi)置模塊 1、os模塊 用于提供系統(tǒng)級別的操作 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 輸出操作系統(tǒng)特定的路徑分隔符,win下為'\\',Linux下為'/' os.linesep 輸出當前平臺使用的行終止符,win下為'\t\n',Linux下為'\n' os.pathsep 輸出用于分割文件路徑的字符串os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' os.system('bash command') 運行shell命令,直接顯示 os.environ 獲取系統(tǒng)環(huán)境變量 os.path.abspath(path) 返回path規(guī)范化的絕對路徑 os.path.split(path) 將path分割成目錄和文件名二元組返回,它僅僅是以 'PATH' 中最后一個 '/' 作為分隔符,分隔后,將索引為0的視為目錄(路徑),將索引為1的視為文件名 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\結(jié)尾,那么就會返回空值。即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[, ...]]) 將多個路徑組合后返回,第一個絕對路徑之前的參數(shù)將被忽略 os.path.getatime(path) 返回path所指向的文件或者目錄的最后存取時間 os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時間 2、time和datetime 在Python中,通常有這幾種方式來表示時間: 時間戳 格式化的時間字符串 元組(struct_time)共九個元素。 由于Python的time模塊實現(xiàn)主要調(diào)用C庫,所以各個平臺可能有所不同。 UTC(Coordinated Universal Time,世界協(xié)調(diào)時)亦即格林威治天文時間,世界標準時間。在中國為UTC+8。DST(Daylight Saving Time)即夏令時。 時間戳(timestamp)的方式:通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”,返回的是float類型。返回時間戳方式的函數(shù)主要有time(),clock()等。 元組(struct_time)方式:struct_time元組共有9個元素,返回struct_time的函數(shù)主要有g(shù)mtime(),localtime(),strptime()。 1、time.time() # 獲取時間戳:當前時間減1970-1-1 00:00 ==> 秒>>> time.localtime() # 本地時間,元組方式(tm_isdst() 是否夏令時)time.struct_time(tm_year=2016, tm_mon=8, tm_mday=29, tm_hour=θ, tm_min=51, tm_sec=37, tm_wday=θ, tm_yday=242, tm_isdst=θ) 2、help(time) # 模塊幫助>>> time.timezone # 查看時區(qū)-28800 # 28800/60秒/60分 = 8時 ==> utc --> 標準+8 3、time.sleep() # 時間睡幾秒time.gmtime() # 不加時間戳,為國際標準時間time.localtime() # 不加時間戳,本地時間# 加上則從1970年開始算。 · 時間轉(zhuǎn)為時間戳 1、>>> x = time.localtime() 2、 >>> x 3、time.struct_time(tm_year=2016, tm_mon=8, tm_mday=29, tm_hour=1, tm_min=θ, tm_sec=8, tm_wday=θ, tm_yday=242, tm_isdst=θ) 4、>>> time.mktime(x) 5、1472403608.θ · 格式化時間字符串 1、>>> time.strftime('%Y-%m-%d %X',x)'/2、2016-08-29 01:00:08' 3、>>> time.strptime('2016-08-29 01:00:08','%Y-%m-%d %X') 4、time.struct_time(tm_year=2016, tm_mon=8, tm_mday=29, tm_hour=1, tm_min=0, tm_sec=8, tm_wday=0, tm_yday=242, tm_isdst=-1) 5、 6、strftime('格式',struct_time) --> '格式化字符串' 7、strptime('格式化字符串','格式') --> 'struct_time' · 轉(zhuǎn)化時間戳和元組到時間字符串 1、>>> time.asctime(time.localtime()) # tuple -> string' 2、Mon Aug 29 01:10:47 2016' 3、>>> time.ctime(888888888) # seconds -> string' 4、Tue Mar 3 09:34:48 1998' · 時間加減 1、import datetime 2、 3、datetime.datetime.now() # 返回 2016-08-19 12:47:03.941925 4、datetime.date.fromtimestamp(time.time()) # 時間戳直接轉(zhuǎn)成日期格式 2016-08-19 5、 6、datetime.datetime.now() + datetime.timedelta(3) # 當前時間+3天 7、datetime.datetime.now() + datetime.timedelta(-3) # 當前時間-3天 8、datetime.datetime.now() + datetime.timedelta(hours=3) # 當前時間+3小時 9、datetime.datetime.now() + datetime.timedelta(minutes=30) # 當前時間+30分 3、random模塊 1、random.random() # 0~1之間的隨機 2、random.randint(1,3) # [1,2,3] 3、random.randrange(3) #[0,1,2] 4、 5、random.choice('hello') # 傳入序列隨機字 6、random.sample('hello',2) # 隨機兩個字母 7、random.uniform(1,3) # 1~3直接隨機 8、a = [1,2,3,4,5] 9、random.shuffle(a) # 洗牌,打亂 10、 11、importstring 12、''.join(random.sample(string.hexdigits,4)) # 隨機4位驗證碼 4、sys模塊 5、shutil模塊 高級的 文件、文件夾、拷貝、壓縮包等 處理模塊 6、ConfigParser 用于對特定的配置進行操作,當前模塊的名稱在 python 3.x 版本中變更為 configparser。 來看一個好多軟件的常見文檔格式如下 如果想用python生成一個這樣的文檔怎么做呢? · 生成 · 讀取出來 · configparser增刪改查語法 7、hashlib模塊 用于加密相關(guān)的操作,3.x里代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,hash 加密都是bytes類型 python 還有一個 hmac 模塊,它內(nèi)部對我們創(chuàng)建 key 和 內(nèi)容 再進行處理然后再加密 8、Subprocess模塊 調(diào)用subprocess.run(…)是推薦的常用方法,在大多數(shù)情況下能滿足需求,但如果你可能需要進行一些復雜的與系統(tǒng)的交互的話,你還可以用subprocess.Popen(),語法如下: 1、p = subprocess.Popen('find / -size +1000000 -exec ls -shl {} \;',shell=True,stdout=subprocess.PIPE) 2、print(p.stdout.read()) 可用參數(shù): args:shell命令,可以是字符串或者序列類型(如:list,元組) bufsize:指定緩沖。0 無緩沖,1 行緩沖,其他 緩沖區(qū)大小,負值 系統(tǒng)緩沖 stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄 preexec_fn:只在Unix平臺下有效,用于指定一個可執(zhí)行對象(callable object),它將在子進程運行之前被調(diào)用 close_sfs:在windows平臺下,如果close_fds被設置為True,則新創(chuàng)建的子進程將不會繼承父進程的輸入、輸出、錯誤管道。 所以不能將close_fds設置為True同時重定向子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。 shell:同上 cwd:用于設置子進程的當前目錄 env:用于指定子進程的環(huán)境變量。如果env = None,子進程的環(huán)境變量將從父進程中繼承。 universal_newlines:不同系統(tǒng)的換行符不同,True -> 同意使用 \n startupinfo與createionflags只在windows下有效 將被傳遞給底層的CreateProcess()函數(shù),用于設置子進程的一些屬性,如:主窗口的外觀,進程的優(yōu)先級等等 終端輸入的命令分為兩種: ·輸入即可得到輸出,如:ifconfig · 輸入進行某環(huán)境,依賴再輸入,如:python 需要交互的命令示例 9、re-正則表達式模塊 常用正則表達式符號 最常用的匹配語法 分組匹配 和 group()、groups()、groupdict() 10、logging模塊 python的logging模塊提供了標準的日志接口,你可以通過它存儲各種格式的日志,logging的日志可以分為 debug(), info(), warning(), error() and critical() 5個級別,下面我們看一下怎么用。 最簡單用法 看一下這幾個日志級別分別代表什么意思 如果想把日志寫到文件里,也很簡單 其中下面這句中的level=loggin.INFO意思是,把日志紀錄級別設置為INFO,也就是說,只有比日志是INFO或比INFO級別更高的日志才會被紀錄到文件里,在這個例子, 第一條日志是不會被紀錄的,如果希望紀錄debug的日志,那把日志級別改成DEBUG就行了。 如果想同時把log打印在屏幕和文件日志里,就需要了解一點復雜的知識 了 11、json和pickle數(shù)據(jù)序列化 str eval 數(shù)據(jù)序列化 json只能處理簡單的,所有語言通用的,函數(shù)不能json序列化 pickle可以序列化python所有的數(shù)據(jù)類型 12、shelve 模塊 shelve模塊是一個簡單的k,v將內(nèi)存數(shù)據(jù)通過文件持久化的模塊,可以持久化任何pickle可支持的python數(shù)據(jù)格式 13、xml處理模塊 xml是實現(xiàn)不同語言或程序之間進行數(shù)據(jù)交換的協(xié)議,跟json差不多,但json使用起來更簡單,json之前的交換方式 參考文檔: http://www.cnblogs.com/alex3714/articles/5161349.html 14、PyYAML模塊 Python也可以很容易的處理ymal文檔格式,只不過需要安裝一個模塊,參考文檔: http:///wiki/PyYAMLDocumentation |
|