模塊:用一堆代碼實現了某個功能的代碼集合,模塊是不帶 .py 擴展的另外一個 Python 文件的文件名。 一、time & datetime模塊 二、random模塊 三、OS模塊 四、sys模塊 五、shutil模塊 六、XML處理模塊 七、configparser模塊 用於生成和修改常見配置文 ...
模塊:用一堆代碼實現了某個功能的代碼集合,模塊是不帶 .py 擴展的另外一個 Python 文件的文件名。
一、time & datetime模塊
1 import time 2 import datetime 3 4 print(time.asctime()) # 返回時間格式:Sun May 7 21:46:15 2017 5 print(time.time()) # 返回時間戳 ‘1494164954.6677325’ 6 print(time.gmtime()) # 返回本地時間 的struct time對象格式,time.struct_time(tm_year=2017, tm_mon=5, tm_mday=7, tm_hour=22, tm_min=4, tm_sec=53, tm_wday=6, tm_yday=127, tm_isdst=0) 7 print(time.localtime()) # 返回本地時間 的struct time對象格式,time.struct_time(tm_year=2017, tm_mon=5, tm_mday=7, tm_hour=22, tm_min=4, tm_sec=53, tm_wday=6, tm_yday=127, tm_isdst=0) 8 print(time.gmtime(time.time()-800000)) # 返回utc時間的struc時間對象格式 9 print(time.asctime(time.localtime())) # 返回時間格式Sun May 7 22:15:09 2017 10 print(time.ctime()) # 返回時間格式Sun May 7 22:15:09 2017 11 print(time.strftime('%Y-%m-%d')) #預設當前時間 2017-05-07 12 print(time.strftime('%Y-%m-%d',time.localtime())) #預設當前時間 2017-05-07 13 14 string_struct = time.strptime("2016/05/22","%Y/%m/%d") # 將日期字元串 轉成 struct時間對象格式 15 print(string_struct) # 返回struct time對象格式 time.struct_time(tm_year=2016, tm_mon=5, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=143, tm_isdst=-1) 16 17 # 將日期字元串轉成時間戳 18 struct_stamp = time.mktime(string_struct) # 將struct time時間對象轉成時間戳 19 print(struct_stamp) # 返回時間戳 ‘1463846400.0’ 20 21 # 將時間戳轉為字元串格式 22 print(time.gmtime(time.time()-86640)) # 將utc時間戳轉換成struct_time格式 23 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) # 將utc struct_time格式轉成指定的字元串格式 24 25 26 # 時間加減 27 print(datetime.datetime.now()) # 返回當前時間 2017-05-07 22:36:45.179732 28 print(datetime.date.fromtimestamp(time.time())) # 時間戳直接轉換成日期格式 2017-05-07 29 print(datetime.datetime.now() + datetime.timedelta(3)) # 返回時間在當前日期上 +3 天 30 print(datetime.datetime.now() + datetime.timedelta(-3)) # 返回時間在當前日期上 -3 天 31 print(datetime.datetime.now() + datetime.timedelta(hours= 3)) # 返回時間在當前時間上 +3 小時 32 print(datetime.datetime.now() + datetime.timedelta(minutes= 30)) # 返回時間在當前時間上 +30 分鐘 33 34 c_time = datetime.datetime.now() 35 print(c_time) # 當前時間為 2017-05-07 22:52:44.016732 36 print(c_time.replace(minute=3,hour=2)) # 時間替換 替換時間為‘2017-05-07 02:03:18.181732’ 37 38 print(datetime.timedelta) # 表示時間間隔,即兩個時間點之間的長度 39 print (datetime.datetime.now() - datetime.timedelta(days=5)) # 返回時間在當前時間上 -5 天 40 41 # python 日曆模塊 42 import calendar 43 44 print(calendar.calendar(theyear= 2017)) # 返回2017年整年日曆 45 print(calendar.month(2017,5)) # 返回某年某月的日曆,返回類型為字元串類型 46 47 calendar.setfirstweekday(calendar.WEDNESDAY) # 設置日曆的第一天(第一天以星期三開始) 48 cal = calendar.month(2017, 4) 49 print (cal) 50 51 print(calendar.monthrange(2017,5)) # 返回某個月的第一天和這個月的所有天數 52 print(calendar.monthcalendar(2017,5)) # 返回某個月以每一周為元素的序列 53 54 cal = calendar.HTMLCalendar(calendar.MONDAY) 55 print(cal.formatmonth(2017, 5)) # 在html中列印某年某月的日曆 56 57 print(calendar.isleap(2017)) # 判斷是否為閏年 58 print(calendar.leapdays(2000,2017)) # 判斷兩個年份間閏年的個數
二、random模塊
1 import random 2 3 # 隨機數 4 print(random.random()) # 返回一個隨機小數'0.4800545746046827' 5 print(random.randint(1,5)) # 返回(1-5)隨機整型數據 6 print(random.randrange(1,10)) # 返回(1-10)隨機數據 7 8 # 生成隨機驗證碼 9 code = '' 10 for i in range(4): 11 current = random.randrange(0,4) 12 if current != i: 13 temp = chr(random.randint(65,90)) 14 else: 15 temp = random.randint(0,9) 16 code += str(temp) 17 18 print(code)
三、OS模塊
1 import os 2 3 print(os.getcwd()) # 獲得當前工作目錄 4 print(os.chdir("dirname")) # 改變當前腳本的工作路徑,相當於shell下的cd 5 print(os.curdir) # 返回當前目錄‘.' 6 print(os.pardir) # 獲取當前目錄的父目錄字元串名‘..' 7 print(os.makedirs('dirname1/dirname2')) # 可生成多層遞歸目錄 8 print(os.removedirs('dirname1/dirname2')) # 若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依此類推 9 print(os.mkdir('test4')) # 生成單級目錄;相當於shell中mkdir dirname 10 print(os.rmdir('test4')) # 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname 11 print(os.listdir('/pythonStudy/s12/test')) # 列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式列印 12 print(os.remove('log.log')) # 刪除一個指定的文件 13 print(os.rename("oldname","newname")) # 重命名文件/目錄) 14 print(os.stat('/pythonStudy/s12/test')) # 獲取文件/目錄信息 15 print(os.pathsep) # 輸出用於分割文件路徑的字元串';' 16 print(os.name) # 輸出字元串指示當前使用平臺。win->'nt'; Linux->'posix' 17 print(os.system(command='bash')) # 運行shell命令,直接顯示 18 print(os.environ) # 獲得系統的環境變數 19 print(os.path.abspath('/pythonStudy/s12/test')) # 返回path規範化的絕對路徑 20 print(os.path.split('/pythonStudy/s12/test')) # 將path分割成目錄和文件名二元組返回 21 print(os.path.dirname('/pythonStudy/s12/test')) # 返回path的目錄。其實就是os.path.split(path)的第一個元素 22 print(os.path.basename('/pythonStudy/s12/test')) # 返回path最後的文件名。如果path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素 23 print(os.path.exists('test')) # 判斷path是否存在 24 print(os.path.isabs('/pythonStudy/s12/test')) # 如果path是絕對路徑,返回True 25 print(os.path.isfile('test')) # 如果path是一個存在的文件,返回True。否則返回False 26 print(os.path.isdir('/pythonStudy/s12/test')) # 如果path是一個存在的目錄,則返回True。否則返回False 27 print(os.path.getatime('/pythonStudy/s12/test')) # 返回path所指向的文件或者目錄的最後存取時間 28 print(os.path.getmtime('/pythonStudy/s12/test')) # 返回path所指向的文件或者目錄的最後修改時間
四、sys模塊
1 import sys 2 3 print(sys.argv) # 命令行參數List,第一個元素是程式本身路徑 4 print(sys.exit(n)) # 退出程式,正常退出時exit(0) 5 print(sys.version) # 獲取python的版本信息 6 print(sys.path) # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值 7 print(sys.platform) # 返回操作平臺的名稱
五、shutil模塊
1 import shutil 2 shutil.copyfileobj(fsrc, fdst, length=16*1024) # 將文件內容拷貝到另一個文件中,可以是部分內容 3 shutil.copyfile(src, dst) # 拷貝文件 4 shutil.copymode(src, dst) # 僅拷貝許可權。內容、組、用戶均不變 5 shutil.copystat(src, dst) # 拷貝狀態的信息,包括:mode bits, atime, mtime, flags 6 shutil.copy(src, dst) # 拷貝文件和許可權 7 shutil.copy2(src, dst) # 拷貝文件和狀態信息 8 shutil.move(src, dst) # 遞歸的去移動文件 9 10 # base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑 11 # format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar” 12 # root_dir: 要壓縮的文件夾路徑(預設當前目錄) 13 # owner: 用戶,預設當前用戶 14 # group: 組,預設當前組 15 # logger: 用於記錄日誌,通常是logging.Logger對象 16 shutil.make_archive(base_name, format,root_dir,owner,group,logger) # 創建壓縮包並返迴文件路徑,例如:zip、tar 17 18 shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個模塊來進行的: 19 20 # zipfile 壓縮解壓 21 22 import zipfile 23 # 壓縮 24 z = zipfile.ZipFile('laxi.zip', 'w') 25 z.write('a.log') 26 z.write('data.data') 27 z.close() 28 29 # 解壓 30 z = zipfile.ZipFile('laxi.zip', 'r') 31 z.extractall() 32 z.close() 33 34 # tarfile 壓縮解壓 35 36 import tarfile 37 38 # 壓縮 39 tar = tarfile.open('your.tar','w') 40 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip') 41 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip') 42 tar.close() 43 44 # 解壓 45 tar = tarfile.open('your.tar','r') 46 tar.extractall() # 可設置解壓地址 47 tar.close()
六、XML處理模塊
1 # xml的格式如下,就是通過<>節點來區別數據結構的: 2 xmltest.xml 3 4 <?xml version="1.0"?> 5 6 <data> 7 8 <country name="Liechtenstein"> 9 10 <rank updated="yes">2</rank> 11 12 <year>2008</year> 13 14 <gdppc>141100</gdppc> 15 16 <neighbor name="Austria" direction="E"/> 17 18 <neighbor name="Switzerland" direction="W"/> 19 20 </country> 21 22 <country name="Singapore"> 23 24 <rank updated="yes">5</rank> 25 26 <year>2011</year> 27 28 <gdppc>59900</gdppc> 29 30 <neighbor name="Malaysia" direction="N"/> 31 32 </country> 33 34 <country name="Panama"> 35 36 <rank updated="yes">69</rank> 37 38 <year>2011</year> 39 40 <gdppc>13600</gdppc> 41 42 <neighbor name="Costa Rica" direction="W"/> 43 44 <neighbor name="Colombia" direction="E"/> 45 46 </country> 47 48 </data> 49 50 51 # xml協議在各個語言里的都 是支持的,在python中可以用以下模塊操作xml 52 53 import xml.etree.ElementTree as ET 54 55 tree = ET.parse("xmltest.xml") 56 root = tree.getroot() 57 print(root.tag) 58 59 #遍歷xml文檔 60 for child in root: 61 print(child.tag, child.attrib) 62 for i in child: 63 print(i.tag,i.text) 64 65 #只遍歷year 節點 66 for node in root.iter('year'): 67 print(node.tag,node.text) 68 69 70 # 修改和刪除xml文檔內容 71 72 import xml.etree.ElementTree as ET 73 74 tree = ET.parse("xmltest.xml") 75 root = tree.getroot() 76 77 #修改 78 79 for node in root.iter('year'): 80 new_year = int(node.text) + 1 81 node.text = str(new_year) 82 node.set("updated","yes") 83 tree.write("xmltest.xml") 84 85 #刪除node 86 87 for country in root.findall('country'): 88 rank = int(country.find('rank').text) 89 if rank > 50: 90 root.remove(country) 91 tree.write('output.xml') 92 93 94 # 自己創建xml文檔 95 import xml.etree.ElementTree as ET 96 97 new_xml = ET.Element("namelist") 98 name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"}) 99 age = ET.SubElement(name, "age", attrib={"checked": "no"}) 100 age = ET.SubElement(name, "age") 101 age.text = '33' 102 name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"}) 103 age = ET.SubElement(name2, "age") 104 age.text = '19' 105 et = ET.ElementTree(new_xml) # 生成文檔對象 106 et.write("test.xml", encoding="utf-8", xml_declaration=True) 107 ET.dump(new_xml) # 列印生成的格式
七、configparser模塊
用於生成和修改常見配置文檔
1 # 好多軟體的常見文檔格式如下 2 [DEFAULT] 3 compressionlevel = 9 4 serveraliveinterval = 45 5 compression = yes 6 forwardx11 = yes 7 8 [bitbucket.org] 9 user = hg 10 11 [topsecret.server.com] 12 host port = 50022 13 forwardx11 = no 14 15 # python 生成一個這樣的文檔 16 17 import configparser 18 19 config = configparser.ConfigParser() 20 21 config["DEFAULT"] = {'ServerAliveInterval': '45', 22 'Compression': 'yes', 23 'CompressionLevel': '9'} 24 25 config['bitbucket.org'] = {} 26 config['bitbucket.org']['User'] = 'hg' 27 config['topsecret.server.com'] = {} 28 topsecret = config['topsecret.server.com'] 29 topsecret['Host Port'] = '50022' 30 topsecret['ForwardX11'] = 'no' 31 config['DEFAULT']['ForwardX11'] = 'yes' 32 with open('example.ini', 'w') as configfile: 33 config.write(configfile) 34 35 36 37 # 寫完了還可以再讀出來 38 39 import configparser 40 config = configparser.ConfigParser() 41 config.sections() 42 file = config.read('example.ini') 43 print(file) # ['example.ini'] 44 45 title = config.sections() 46 print(title) # ['bitbucket.org', 'topsecret.server.com'] 47 48 print('bitbucket.org' in config) # True 49 print('bytebong.com' in config) # False 50 print(config['bitbucket.org']['User']) # hg 51 print(config['DEFAULT']['Compression']) # yes 52 53 topsecret = config['topsecret.server.com'] 54 print(topsecret['ForwardX11']) # no 55 print(topsecret['Host Port']) # 50022 56 57 for key in config['topsecret.server.com']: 58 print(key) 59 ''' 60 輸出結果: 61 host port 62 forwardx11 63 compressionlevel 64 serveraliveinterval 65 compression 66 ''' 67 print(config['topsecret.server.com']['Compression']) # yes 68 69 # configparser增刪改查語法 70 import configparser 71 72 config = configparser.ConfigParser() 73 config.read('i.cfg') 74 75 secs = config.sections() # 返回配置文件中的主節點 76 print (secs) 77 78 options = config.options('bitbucket.org') 79 print(options) # 返回所有子節點信息 80 81 item_list = config.items('bitbucket.org') 82 print(item_list) # 列出所有子節點詳細信息 83 84 val = config.get('topsecret.server.com','host port') 85 print(val) # 返回單個子節點信息 86 87 val2 = config.getint('topsecret.server.com','host port') 88 print(val2) 89 90 # 刪除'bitbucket.org' 91 sec = config.remove_section('bitbucket.org') 92 config.write(open('i.cfg','w')) 93 94 95 sec2 = config.add_section('huhuan2') # 添加主節點 96 config.set('huhuan2','k','1111') # 添加子節點 97 config.set('huhuan','kk','2222') 98 config.remove_option('huhuan','kk') # 刪除子節點 99 config.write(open('i.cfg','w'))
八、hashlib模塊
用於加密相關的操作
1 import hashlib 2 3 # ****** md5 ****** 4 m =hashlib.md5() 5 m.update(b'hello') 6 print(m.hexdigest()) # 16進位格式 7 print(m.digest()) # 2進位格式 8 9 # ****** shal ****** 10 hash = hashlib.sha1() 11 hash.update(b'hello') 12 print(hash.hexdigest()) 13 14 # ****** sha224 ****** 15 hash = hashlib.sha224() 16 hash.update(b'hello') 17 print(hash.hexdigest()) 18 19 # ****** sha256 ****** 20 hash = hashlib.sha256() 21 hash.update(b'hello') 22 print(hash.hexdigest()) 23 24 # ****** sha384 ****** 25 hash = hashlib.sha384() 26 hash.update(b'hello') 27 print(hash.hexdigest()) 28 29 # ****** sha512 ****** 30 hash = hashlib.sha512() 31 hash.update(b'hello') 32 print(hash.hexdigest()) 33