Python随心记--模块
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())