Python隨心記--模組
阿新 • • 發佈:2018-12-24
time時間模組方法
import time time.time() #時間戳 time.localtime() #結構化時間 也可以時間戳轉為結構化時間 t = time.localtime() print(t.tm_year) print(t.tm_wday) time.gmtime() time.mktime(time.localtime()) #把結構化時間轉為時間戳 time.strftime('%Y-%m-%d %X',time.localtime()) #將結構化時間轉為字串時間time.strptime('2018:12:18:22:11:11','%Y:%m:%d:%X') #將字串時間轉為結構化時間 time.asctime() time.ctime() time.sleep()
datetime時間模組方法
import.datetime datetime.datetime.now()
random隨機模組
import random random.random() random.randint(1,6) #指1-6範圍內的數 random.randrange(1,6) random.choice([11,22,33,44,55,66,77]) random.sample([11,22,33,44,55,66,77],2) #隨機取兩個 random.uniform(1,5) #隨機浮點數 random.shuffle([1,2,3,4,5,6]) #打亂列表順序 #驗證碼 import random def v_code(): ret = '' for i in range(6): num = random.randint(0,9) alf = chr(random.randint(65,122)) #字母的ascall ret += str(random.choice([num,alf])) return ret print(v_code())
BASEDIR介紹
__file__ #列印當前執行的路徑
import sys,os BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) #拿到上級目錄 sys.path.append(BASE_DIR) #檔案新增執行路勁
os模組
import os os.getcwd() #獲取當前工作目錄 os.path() os.chdir() #改變當前工作目錄 os.curdir() #返回當前目錄 os.pardir() #獲取當前目錄的父級目錄字串名 os.makedirs() #生成多層遞迴資料夾 os.removedirs() #刪除並遞迴到上一層(有內容不刪) os.mkdir() #生成單層資料夾 os.rmdir() #生成單層資料夾(有內容不刪) os.listdir() #列出檔案目錄 os.remove() #刪除檔案 os.rename() #改名 os.stat() #獲取檔案資訊 os.sep() #輸出作業系統特定的路徑分隔符 os.linesep() #輸出當前平臺使用的行終止符 os.pathsep() #輸出用於分割檔案路徑的字串 os.name() #輸出字串只是當前使用平臺 os.system #執行shell命令 os.environ #獲取系統環境變數 os.paht.abspath() #返回path規範化的絕對值 os.path.split(path) #將path分割成目錄和檔名二元組返回 os.path.dirname(path) os.path.basename(path) #返回path最後檔名 os.path.exists(path) #如果path存在返回True os.isabs(path) #如果path是絕對路徑,但會True os.isfile(path) #如果path是一個存在的 檔案返回True os.path.isdir(path) #如果是一個存在目錄返回True os.path.join(path) #將多個路徑組合拼接並返回 os.path.getatime() #返回目錄最後一次存取時間 os.path.getmtime() #返回目錄最後一次修改時間
sys模組
import sys sys.exit(n) #退出程式 sys.argv #命令列引數list sys.maxint #最大int值 sys.path #返回模組的手速路徑 sys.platform #返回作業系統平臺名稱
#進度條 import time import sys for i in range(10): sys.stdout.write('#') time.sleep(1) sys.stdout.flush()
json & pickle模組
import json json.dumps(dic) dic={'name':'aa',} print(json.dumps(dic)) json.loads(dic)
shelve模組
import shelve shelve.open(r'shelve') #將一個字典寫入檔案
xml模組
import xml.etree.ElementTree as ET tree = ET.parse('xml_lesson') #解析xml檔案,得到tree物件 root = tree.getroot() print(root.tag) #root.tag 列印標籤 for i in root: # print(i.tag) for j in i: # print(j.attrib) print(j.text) #取標籤的文字內容 for i in root.iter('year'): print(i.tag,i.text) #修改 for i in root.iter('year'): new_year = int(i.text)+1 i.text = str(new_year) i.set('update','year') tree.write('xml_lesson') #把修改的內容寫入原檔案 #刪除 for i in root.findall('country'): rank = int(i.find('rank').text) if rank > 50: root.remove(i) tree.write('xml_lesson') #把修改的內容寫入原檔案 #建立xml資料 new_xml = ET.Element('namelist') #建立根節點 name = ET.SubElement(new_xml,'name',attrib={'enumerate':'year'}) age = ET.SubElement(new_xml,'age',attrib={'checkend':'no'}) sex = ET.SubElement(new_xml,'sex') sex.text = '23' name2 = ET.SubElement(new_xml,'name',attrib={'enumerate':'year'}) age = ET.SubElement(name2,'age') age.text = '12' et = ET.ElementTree(new_xml) #生成文件物件 et.write('test.xml',encoding='utf-8')
re正則模組
import re ret = re.findall('a...n','helloalvin') # .萬用字元 匹配已a開頭n結尾,中間點的個數帶代表字元 ret = re.findall('^a..n','helloalvin') #匹配以a開頭,中間點的個數帶代表字元 ret = re.findall('a..n$','helloalvin') #匹配以n結尾的,中間點的個數代表字元 ret = re.findall('d*','heddlloddddalvin') #匹配字串中的d ,*匹配0到無窮次(貪婪匹配) ret = re.findall('d+','heddlloddddalvin') #匹配字串中的d ,匹配1到無窮次(貪婪匹配) ret = re.findall('ed?','heddllodddeddalvin') #匹配0到1次 ret = re.findall('ed{0,}','heddllodddeddalvin') #{0,}表示0到無窮,{1,}表示1到無窮,{1,}表示1到無窮 {0,1}表示0到1次 ret = re.findall('abc*?','abcccc') #惰性匹配(以最少次數匹配) ret = re.findall('a[bc]','abcdc') #匹配[]裡面任意字元跟[]前面字元組合 ret = re.findall('q[a*z]','dwqdqasdq') #匹配[]裡面任意字元跟[]前面字元組合 ret = re.findall('q[a-z]','quoqz') # - 指範圍 匹配[]裡面任意字元跟[]前面字元組合 ret = re.findall('q[a-z]*','quoqz') # - 指範圍 匹配[]裡面任意字元跟[]前面字元組合 ret = re.findall('q[A-Z]*','qu1oq3z') # - 指範圍 匹配[]裡面任意字元跟[]前面字元組合 ret = re.findall('q[^a-z]','q123') #[^a-z] 非a-z開頭的 ret = re.findall('q[^a-z]','qa123') #[^a-z] 非a-z開頭的 ret = eval('12+(56*6+5*(5-2))') ret = re.findall('\([^()]*\)','12+(56*6+5*(5-2))') ret = re.findall('\d+','12+(56*6+5*(5-2))') #匹配數字 ret = re.findall('\D+','12+(56*6+5*(5-2))') #匹配非數字 ret = re.findall('\s+','hello world') #匹配空格 ret = re.findall('\S+','hello world') #匹配非空格 ret = re.findall('\w+','hello world_') #匹配字母數字相當於[a-zA-Z0-9] ret = re.findall('\W+','hello world_') #匹配非字母數字相當於[a-zA-Z0-9] ret = re.findall(r'I\b','hello I am LIs') #匹配一個特殊字元邊界 比如空格 & ret = re.findall('I\\b','hello I am LIs') ret = re.findall('c\\\\l','helloc\lsad') ret = re.findall(r'c\\l','helloc\lsad') ret = re.findall(r'ka|b','hellocdsbad') #管道符| ret = re.findall(r'ka|b','hellocdska|bad') #管道符| ret = re.findall('(abc)+','abcabcabc') #分組 ret = re.search('(?P<name\w+>)','abcabcabc').group() #分組 ret = re.search('\d+','abc23abc21abc').group() #分組 ret = re.search('(?P<name>[a-z]+>)','alex36wupeiq33').group() #分組 ret = re.search('(?P<name>[a-z]+>)\d+','alex36wupeiq33').group('name') #分組 ret = re.search('(?P<name>[a-z]+>)(?P<age>\d+>)','alex36wupeiq33').group('age') #分組 ret = re.match('a','abc').group() ret = re.split('[ab]','abc') #先按a分割得到''和bcd 在對 ''和 bcd 分別按b分割 ret = re.sub('\d','g','alvin5yuan6') ret = re.sub('\d','g','alvin5yuan6',1) #1表示前一個 ret = re.subn('\d','g','alvin5yuan6',1) #1表示前一個 ret = re.compile() ret = re.finditer() #返回一個物件
logging模組
import logging logging.basicConfig( level = logging.DEBUG, filename = 'logger.log', #日誌存放位置 filemode= 'w', format = '%(asctime)s %(filename)s[%(lineno)d] %(message)s' #filename:執行檔名 asctime :時間 lineno:所在檔案行號 message:錯誤資訊 ) logging.debug('hello') logging.info('hello') logging.warning('warning message') logging.error('error') logging.critical('critical message') def logger(): logger = logging.getLogger() fh = logging.FileHandler('test_log') ch = logging.StreamHandler() fm = logging.Formatter('%(asctime)s %(message)s') fh.setFormatter(fm) ch.setFormatter(fm) logger.addHandler(fh) logger.addHandler(ch) logger.setLevel('DEBUG') return logger logger = logger() logger.debug('hello') logger.info('hello') logger.warning('warning message') logger.error('error') logger.critical('critical message')
configparser模組
import configparser config = configparser.ConfigParser() config['DEFFAULT'] = { 'ServerAliveInterval':'45', 'Compression':'yes', "Comperssion":'9' } config['bitbucket.org'] = {} config['bitbucket.org']['User'] = 'hg' config['topsecret.server.com'] = {} topsecret = config['topsecret.server.com'] topsecret['Host Port'] = '50022' topsecret['ForwardXll'] = 'no' config['DEFAULT']['ForwardXll'] = 'yes' with open('example.ini','w') as f: config.write(f) config = configparser.ConfigParser() config.read('example.ini') #-----查------- print(config.sections()) print('bytebong.com' in config) print(config['bitbucket.org']['user']) print(config['DEFFAULT']['serveraliveinterval']) for i in config['bitbucket.org']: #會把DEFFAULT下的也拿出來 print(i) print(config.options('bitbucket.org')) print(config.items('bitbucket.org')) print(config.get('bitbucket.org','compression')) #------增刪改------ config.add_section('yuan') config.set('yuan','k1','22222') config.remove_section('yuan') config.remove_option('DEFAULT','forwardxll') config.write(open('i.cfg','w'))
hashlib模組
import hashlib objk = hashlib.md5() #m = hashlib.sha256 objk = hashlib.sha256() #m = hashlib.sha256 objk = hashlib.md5('sb'.encode('utf8')) #加鹽 objk.update('heloo'.encode('utf8')) print(objk.hexdigest())