Python常用模組總結

來源:互聯網
上載者:User

標籤:cti   env   轉換   大於   建立檔案   icc   時間轉換   nod   utf-8   

sys

sys模組是與Python解譯器互動的一個介面

sys.argv 命令列參數List,第一個元素是程式本身路徑
sys.exit(n) 退出程式,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version 擷取Python解釋程式的版本資訊
sys.path 返回模組的搜尋路徑,初始化時使用PYTHONPATH環境變數的值
sys.platform 返回作業系統平台名稱

os

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.popen("bash command).read() 運行shell命令,擷取執行結果
os.environ 擷取系統內容變數
os.path.abspath(path) 返回path正常化的絕對路徑 os.path.split(path) 將path分割成目錄和檔案名稱二元組返回 os.path.dirname(path) 返回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所指向的檔案或者目錄的最後修改時間
os.path.getsize(path) 返回path的大小

re

Regex,用來做字串的匹配操作
元字元
. 除分行符號以外的任何一個字元
? 匹配0到1個任一字元
(+) 匹配1到多個任一字元
(*) 匹配0到多個任一字元
{,num2} 配置0到num2個{}前面那個字元
{num1,num2} 匹配num1到num2個{}前面那個字元
{num1,} 匹配num1到多個{}前面那個字元
^ 以……開頭
$ 以……結尾
[a-z] 字元集,允許匹配a-z的任意一個字元,在[]中,除^代表非,\外,其他元字元不再有特殊意義
\ 後面跟元字元表示去除元字元特殊功能

> \d 匹配任何十進位數,相當於[0-9]
> \D 匹配任何非數字字元,相當於[^0-9]
> \s 匹配任何非空白字元,相當於[ \t\n\r\f\v]
> \S 匹配任何非空白字元,相當於[^ \t\n\r\f\v]
> \w 匹配任何字母數字字元,相當於[a-zA-Z0-9]
> \W 匹配任何非字母數字字元,相當於[^a-zA-Z0-9
]
> \b 匹配一個單詞邊界
> r 原生字元

re.findall(‘kernel‘,‘kernelhjghjgbhjhjkerneljhjh‘) 在後面的那個字串中找到符合前面規則的字串以列表的形式返回
re.match(pattern,string,flag=0) 只從字串開頭開始匹配,配置成功,就會返回一個match object對象,必須到調用match object對象的方法才可以拿到值

> start() 返回匹配開始的位置
> end() 返回匹配結束的位置
> span() 返回一個元祖包含匹配(開始,結束)的位置
> group() 返回匹配成功的字串
> groups() 擷取模型中匹配到的分組結果
> groupdict() 同上,以key:value的形式 r = re.match(‘h(?P<name>\w+)’) 則key=name value=as

re.serach() 和match()類似,區別是可以從字串的任意位置開始匹配,但只會匹配一次
re.sub(pattern,repl,string,max) 替換,根據pattern配置,將匹配的結果替換成repl,max表示最大替換次數
re.subn() 和re.sub()類似,區別是將匹配的次數也返回
re.split() 分割
re.compile() 將匹配規則封裝成一個對象,在重複多次相同規則匹配的情境中效率會提高

time

時間處理模組

time模組的幾種轉換方式
print(time.time()) 時間戳記
print(time.strftime("%Y-%m-%d %X")) 格式化的時間字串
print(time.localtime()) 本地時區的struct_time
print(time.gmtime()) UTC時區的struct_time

時間戳記轉換為結構化時間
now_time = time.time() 時間戳記
print(now_time)
struct_time = time.localtime(now_time) 時間戳記轉換為結構化時間
print(struct_time)

結構化時間轉化為時間戳記
struct_time = time.localtime(time.time()) 結構化時間
print(struct_time)
now_time = time.mktime(struct_time) 結構化時間轉換為時間戳記
print(now_time)

結構化時間轉化為字串時間
struct_time = time.localtime(time.time()) 結構化時間
print(struct_time)
str_time = time.strftime("%Y-%m-%d",struct_time) 結構化時間轉換為字串時間
print(str_time)

字串時間轉化為結構化時間
str_time = "2018-04-17" 字串時間
struct_time = time.strptime(str_time,"%Y-%m-%d") 字串時間轉換為結構化時間
print(struct_time)

timedate

日期處理模組

timedate.date.today() 輸出日期
timedate.date.fromtimestamp() 接收時間戳記,轉換成日期
timedate.current_time() 輸出日期時間毫秒值
timedate.current_time.timetuple() 將日期時間毫秒值轉換成struct_time
timedate.current_time.replace() 替換日期

json

只能適用於Python的基礎資料型別 (Elementary Data Type),跨語言

json.loads() 接收一個字串,轉換成Python資料類型
json.load() 從文化中讀取字串,轉換成Python資料類型
json.dumps() 接收一個Python資料類型。轉換成字串
json.dump() 接收一個Python資料類型,轉換成字串,寫入到檔案中

pickle

適用於Python的所有資料類型,但是只針對Python

pickle.loads() 接收位元組,轉換成Python資料類型
pickle.load() 從文化中讀取位元組,轉換成Python資料類型
pickle.dumps() 接收一個Python資料類型。轉換成位元組
pickle.dump() 接收一個Python資料類型,轉換成位元組,寫入到檔案中

logging

Tlog模組

日誌的層級
預設情況下Python的logging模組將日誌列印到了標準輸出中,且只顯示了大於等於WARNING層級的日誌,這說明預設的記錄層級設定為WARNING(記錄層級等級CRITICAL > ERROR > WARNING > INFO > DEBUG)

日誌的配置
logging.basicConfig(level=logging.DEBUG,
format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
datefmt=‘%a, %d %b %Y %H:%M:%S‘,
filename=‘/tmp/test.log‘,
filemode=‘w‘)
logging.debug(‘debug message‘)
logging.info(‘info message‘)
logging.warning(‘warning message‘)
logging.error(‘error message‘)
logging.critical(‘critical message‘)

配置參數
logging.basicConfig() 函數中可通過具體參數來更改logging模組預設行為,可用參數有:
filename:用指定的檔案名稱建立FiledHandler,這樣日誌會被儲存在指定的檔案中。
filemode:檔案開啟檔案,在指定了filename時使用這個參數,預設值為“a”還可指定為“w”。
format 指定handler使用的日誌顯示格式。
datefmt:指定日期時間格式。
level:設定rootlogger(後邊會講解具體概念)的記錄層級
stream:用指定的stream建立StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者檔案(f=open(‘test.log’,’w’)),預設為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。
format參數中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 數字形式的記錄層級
%(levelname)s 文本形式的記錄層級
%(pathname)s 調用日誌輸出函數的模組的完整路徑名,可能沒有
%(filename)s 調用日誌輸出函數的模組的檔案名稱
%(module)s 調用日誌輸出函數的模組名
%(funcName)s 調用日誌輸出函數的函數名
%(lineno)d 調用日誌輸出函數的語句所在的程式碼
%(created)f 目前時間,用UNIX標準的表示時間的浮 點數表示
%(relativeCreated)d 輸出日誌資訊時的,自Logger建立以 來的毫秒數
%(asctime)s 字串形式的目前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒
%(thread)d 程ID。可能沒有
%(threadName)s 線程名。可能沒有
%(process)d 進程ID。可能沒有
%(message)s 使用者輸出的訊息

logger對象配置

logger = logging.getLogger(‘kernel‘) # 建立logging對象
logger.setLevel(logging.DEBUG) # 指定全域被處理訊息層級(全域處理訊息層級要高於或等於局部訊息處理層級)

ch = logging.StreamHandler() # 螢幕流
ch.setLevel(logging.DEBUG) # 指定局部被處理訊息層級

fh = logging.FileHandler("access.log") # 檔案流
fh.setLevel(logging.WARNING) # 指定局部被處理訊息層級

formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘) # 建立時間格式

ch.setFormatter(formatter) # 設定螢幕流時間格式
fh.setFormatter(formatter) # 設定文字資料流時間格式

logger.addHandler(ch) # 將螢幕流對象添加到logger中
logger.addHandler(fh) # 將文字資料流對象添加到logger中

logger.debug(‘debug message‘)
logger.info(‘info message‘)
logger.warn(‘warn message‘)
logger.error(‘error message‘)
logger.critical(‘critical message‘)

hashlib

加密模組

obj = hashlib.md5() # 建立hashlib對象obj = hashlib.md5(bytes(‘kernel‘,encoding=‘utf-8‘)) # 建立hashlib對象並加言obj.update(bytes(‘hello‘,encoding=‘utf-8‘)) # 加密ret = obj.hexdigest() # 擷取密文
configparser

操縱設定檔模組

import configparsercfg = configparser.ConfigParser() # 建立configparser對象cfg.read(‘conf‘,encoding=‘utf-8‘) # 讀取設定檔secs = cfg.sections() # 擷取所有節點print(secs)options = cfg.options(secs[0]) # 擷取指定節點的所有keyprint(options)item = cfg.items(secs[0]) # 擷取指定節點的索引值對組合print(item)val = cfg.get(secs[0],options[0]) # 擷取指定節點下的指定key的值print(val)sec = cfg.remove_section(secs[0]) # 刪除指定節點cfg.write(open(‘conf‘,‘w‘))print(sec)sec = cfg.has_section(‘jiedian1‘) # 檢查是否存在該節點print(sec)sec = cfg.add_section(‘jiedian1‘) # 添加該節點cfg.write(open(‘conf‘,‘w‘))print(sec)cfg.set(secs[0],options[0],‘111‘) # 修改指定節點下指定key的值cfg.write(open(‘conf‘,‘w‘))cfg.remove_option(secs[0],options[0]) # 刪除指定節點下指定索引值對cfg.write(open(‘conf‘,‘w‘))
XML

操作XML檔案模組

from xml.etree import ElementTree as ETfrom xml.dom import minidom# 修改XML"""解析XML的方式有兩種1.解析字串方式將字串解析成XML對象,root代指XML檔案的根節點str_xml = open(‘xo.xml‘, ‘r‘).read()root = ET.XML(str_xml)2.解析檔案方式擷取xml檔案的根節點tree = ET.parse("xo.xml")root = tree.getroot()"""# 遍曆XML的所有內容et = ET.parse(‘conf.xml‘)root = et.getroot() # 擷取根節點print(root)print(root.tag) # 頂層標籤for child in root: # 遍曆XML文檔的第二層    print(‘ ‘ + child.tag,child.attrib) # 第二層節點的標籤名和標籤屬性    for i in child: # 遍曆XML文檔的第三層        print(‘     ‘ + i.tag,i.attrib) # 第三層節點的標籤名和標籤屬性        print(‘         ‘ + str(i.text)) # 第三層節點的屬性# 遍曆XML的指定節點for node in root.iter(‘year‘): # 遍曆XML的所有year節點    print(node.tag, node.text) # 節點的標籤名稱和內容# 節點的標籤名稱和內容並修改節點內容for node in root.iter(‘year‘): # 遍曆XML的所有year節點    print(node.tag, node.text) # 節點的標籤名稱和內容    new_year = int(node.text) + 1 # 將year節點的內容增加1    node.text = str(new_year)    node.set(‘name‘, ‘kernel‘) # 設定屬性和值    node.set(‘age‘, ‘18‘)    del node.attrib[‘name‘] # 刪除屬性# 刪除節點for country in root.findall(‘country‘): # 遍曆data下的所有country節點    rank = int(country.find(‘rank‘).text) # 擷取每一個country節點下rank節點的內容    if rank > 50:        root.remove(country)  # 刪除指定country節點"""儲存XML檔案的方式也有兩種1.解析字串方式tree = ET.ElementTree(root)tree.write("newnew.xml", encoding=‘utf-8‘)2.解析檔案方式tree.write("new.xml",encoding=‘utf-8‘)"""# 建立XML檔案# 方式一root = ET.Element("famliy")son1 = ET.Element(‘son‘, {‘name‘: ‘大兒子‘}) # 建立大兒子節點son2 = ET.Element(‘son‘, {"name": ‘二兒子‘}) # 建立二兒子節點grandson1 = ET.Element(‘grandson‘, {‘name‘: ‘大孫子‘}) # 在大兒子中建立兩個孫子grandson2 = ET.Element(‘grandson‘, {‘name‘: ‘二孫子‘})son1.append(grandson1) # 將孫子添加到兒子節點中son1.append(grandson2)root.append(son1) # 把兒子添加到根節點中root.append(son1)tree = ET.ElementTree(root)tree.write(‘oooo.xml‘,encoding=‘utf-8‘, short_empty_elements=False)# 方式二root = ET.Element("famliy")son1 = root.makeelement(‘son‘, {‘name‘: ‘大兒子‘}) # 建立大兒子節點son2 = root.makeelement(‘son‘, {"name": ‘二兒子‘}) # 建立二兒子節點grandson1 = root.makeelement(‘grandson‘, {‘name‘: ‘大孫子‘}) # 在大兒子中建立兩個孫子grandson2 = root.makeelement(‘grandson‘, {‘name‘: ‘二孫子‘})son1.append(grandson1) # 將孫子添加到兒子節點中son1.append(grandson2)root.append(son1) # 把兒子添加到根節點中root.append(son1)tree = ET.ElementTree(root)tree.write(‘oooo.xml‘,encoding=‘utf-8‘, short_empty_elements=False)# 方式三root = ET.Element("famliy")son1 = root.SubElement(‘son‘, {‘name‘: ‘大兒子‘}) # 建立大兒子節點son2 = root.SubElement(‘son‘, {"name": ‘二兒子‘}) # 建立二兒子節點grandson1 = root.SubElement(‘grandson‘, {‘name‘: ‘大孫子‘}) # 在大兒子中建立兩個孫子grandson2 = root.SubElement(‘grandson‘, {‘name‘: ‘二孫子‘})son1.append(grandson1) # 將孫子添加到兒子節點中son1.append(grandson2)root.append(son1) # 把兒子添加到根節點中root.append(son1)tree = ET.ElementTree(root)tree.write(‘oooo.xml‘,encoding=‘utf-8‘, short_empty_elements=False) # short_empty_elements=False 表示控制元素的格式如果值為False,沒有內容,它們是作為一個單獨閉合的標籤,否則它們會以一對的形式發射開始/結束標記# 方式四 原生儲存的XML時預設無縮排,如果想要設定縮排的話,需要修改儲存方式def prettify(elem):    """將節點轉換成字串,並添加縮排。    """    rough_string = ET.tostring(elem, ‘utf-8‘)    reparsed = minidom.parseString(rough_string)    return reparsed.toprettyxml(indent="\t")root = ET.Element("famliy")son1 = ET.Element(‘son‘, {‘name‘: ‘大兒子‘}) # 建立大兒子節點son2 = ET.Element(‘son‘, {"name": ‘二兒子‘}) # 建立二兒子節點grandson1 = ET.Element(‘grandson‘, {‘name‘: ‘大孫子‘}) # 在大兒子中建立兩個孫子grandson2 = ET.Element(‘grandson‘, {‘name‘: ‘二孫子‘})son1.append(grandson1) # 將孫子添加到兒子節點中son1.append(grandson2)root.append(son1) # 把兒子添加到根節點中root.append(son1)raw_str = prettify(root)f = open("xxxoo.xml",‘w‘,encoding=‘utf-8‘)f.write(raw_str)f.close()
subprocess

執行系統命令模組

call

> 執行命令,返回狀態代碼
> ret = subprocess.call(["ls", "-l"], shell=False)
> ret = subprocess.call("ls -l", shell=True)

check_call

> 執行命令,如果執行狀態代碼是 0 ,則返回0,否則拋異常
> subprocess.check_call(["ls", "-l"])
> subprocess.check_call("exit 1", shell=True)

check_output

> 執行命令,如果狀態代碼是 0 ,則返回執行結果,否則拋異常
> subprocess.check_output(["echo", "Hello World!"])
> subprocess.check_output("exit 1", shell=True)

subprocess.Popen(...)

> 用於執行複雜的系統命令
> 參數:
> args:shell命令,可以是字串或者序列類型(如:list,元組)
> bufsize:指定緩衝。0 無緩衝,1 行緩衝,其他 緩衝區大小,負值 系統緩衝
> stdin, stdout, stderr:分別表示程式的標準輸入、輸出、錯誤控制代碼
> preexec_fn:只在Unix平台下有效,用於指定一個可執行對象(callable object),它將在子進 程運行之前被調用
> close_sfs:在windows平台下,如果close_fds被設定為True,則新建立的子進程將不會繼承父進程的輸入、輸出、錯誤管道。
> close_sfs:在windows平台下,如果close_fds被設定為True,則新建立的子進程將不會繼承父進程的輸入、輸出、錯誤管道。
> close_sfs:在windows平台下,如果close_fds被設定為True,則新建立的子進程將不會繼承父進程的輸入、輸出、錯誤管道,所以不能將close_fds設定為True同時重新導向子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。
> shell:同上
> cwd:用於設定子進程的目前的目錄
> env:用於指定子進程的環境變數。如果env = None,子進程的環境變數將從父進程中繼承。
> universal_newlines:不同系統的分行符號不同,True -> 同意使用 \n
> startupinfo與createionflags只在windows下有效,將被傳遞給底層的CreateProcess()函數,用於設定子進程的一些屬性,如:主視窗的外觀,進程的優先順序等等

import subprocess"""終端輸入的命令分為兩種:輸入即可得到輸出,如:ifconfig輸入進行某環境,依賴再輸入,如:python"""

執行普通命令
ret1 = subprocess.Popen(["mkdir","t1"])
ret2 = subprocess.Popen("mkdir t2", shell=True)

在指定目錄上建立檔案夾
obj = subprocess.Popen("mkdir t3", shell=True, cwd=‘/home/dev‘,)

依賴環境的命令
obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)")

out_error_list = obj.communicate()
print(out_error_list)

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
out_error_list = obj.communicate(‘print("hello")‘)
print(out_error_list)

Python常用模組總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.