python学习(day5)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习(day5)相关的知识,希望对你有一定的参考价值。
9、时间模块:
import time print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了time.process_time()测量处理器运算时间,不包括sleep时间,不稳定,mac上测不出来 print(time.altzone/3600) #返回与utc时间的时间差,以秒计算print(time.asctime()) #返回时间格式"Fri Aug 19 11:14:16 2016", t = time.localtime() t2 = time.localtime(time.time()+3600*3)#时间运算,当前时间加3个小时 print(t) print(t2) print(time.localtime()) #返回本地时间 的struct time对象格式 # print(time.gmtime(time.time()-800000)) #返回utc时间的struc时间对象格式 print(t.tm_year,t.tm_mday) print(time.time())#时间戳,1970年开始到现在的时间 print(time.time()/(3600*24*365)) print(time.gmtime())#utc时间 print(time.asctime(time.localtime())) #返回时间格式"Fri Aug 19 11:14:16 2016", print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上 #日期字符串 转成 时间戳 string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #将 日期字符串 转成 struct时间对象格式 string_3_struct = time.strptime("2016-05-22 23:30:30","%Y-%m-%d %H:%M:%S") #将 日期字符串 转成 struct时间对象格式 print(string_2_struct) print(string_3_struct) # struct_2_stamp = time.mktime(string_2_struct) #将struct时间对象转成时间戳 struct_3_stamp = time.mktime(string_3_struct) #将struct时间对象转成时间戳 print(struct_2_stamp) print("struct_3_stamp",struct_3_stamp) #将时间戳转为字符串格式 print(time.gmtime(time.time()-86640)) #将utc时间戳转换成struct_time格式 print(time.localtime(time.time()-86640)) #将local时间戳转换成struct_time格式 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将utc struct_time格式转成指定的字符串格式 t2 = time.strptime("2016-11-11 23:30:30","%Y-%m-%d %H:%M:%S")#字符串转struct时间对象格式 print("时间对象t2",t2) t3 = time.mktime(t2)#将struct时间对象转成时间戳 print("时间戳t3",t3) #t3_str1 = time.strftime("%Y %m %d %H:%M:%S",t3)#时间戳转字符串 print("时间戳转字符串",time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())) #时间加减 import datetime print("datetime".center(50,‘-‘)) print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2016-08-19 print(datetime.datetime.now() ) print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天 print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天 print(datetime.datetime.now() - datetime.timedelta(3)) #当前时间-3天 print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时 print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分 c_time = datetime.datetime.now() print(c_time.replace(minute=23,hour=23,month=5,day=1,year=2020)) #时间替换
10、Random模块:
import random,string print(random.random())#随机生成的一个实数,它在[0,1)范围内 print(random.randint(1,2))#随机生成整数n,1<=n<=2 print(random.randrange(1,2))#随机生成整数n,1<=n<2 print(random.sample(‘qweasdasf‘,3))#random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列 list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice = random.sample(list, 5) #从list中随机获取5个元素,作为一个片断返回 print(slice) print(list) #原有序列并没有改变。 print(string.ascii_letters) print(string.digits) str = string.ascii_letters+string.digits print(‘‘.join(random.sample(str,6)))#随机取6位 #生成随机验证码: checkcode = ‘‘ for i in range(4): current = random.randrange(0,4) if current != i: temp = chr(random.randint(65,90)) else: temp = random.randint(0,9) checkcode += ‘%s‘%temp print(checkcode)
11、Shutil模块:
import shutil #http://www.cnblogs.com/wupeiqi/articles/4963027.html # f1 = open("time_module.py") # f2 = open("time_module_new.py","w") # shutil.copyfileobj(f1,f2)#将文件内容拷贝到另一个文件中,可以部分内容 #shutil.copy(r"C:\Users\Administrator\PycharmProjects\s14\day1\userdata.txt","test_copy")#拷贝文件和权限,复制一个文件到一个文件或一个目录,r是保持字符串原始值的意思,就是说不对其中的符号进行转义 #shutil.copy2()#在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西 #shutil.copyfile()#拷贝文件,copyfile( src, dst)从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉 # shutil.copytree(r"C:\Users\Administrator\PycharmProjects\s14\day4","day4_new")#copytree(olddir,newdir,True/Flase),把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接 # # shutil.rmtree()#递归的去删除文件 # shutil.move(src, dst)#递归的去移动文件 #shutil.make_archive(‘base_name‘, format,...)#创建压缩包并返回文件路径,例如:zip、tar # shutil.make_archive(r"C:\day4_copy", format="zip",root_dir=r"C:\Users\Administrator\PycharmProjects\s14\day4") #压缩解压: import zipfile # zip_obj = zipfile.ZipFile(r"C:\day4_copy.zip","a")#‘r‘表示打开一个存在的只读ZIP文件;‘w‘表示清空并打开一个只写的ZIP文件,或创建一个只写的ZIP文件;‘a‘表示打开一个ZIP文件,并添加内容。 # zip_obj.write("test_copy")#将test_copy文件写进压缩文件 # zip_obj.close() # z = zipfile.ZipFile("C:\day5_copy.zip","r")#解压zip文档中的所有文件到当前目录 # z.extractall() # z.close() # import tarfile#把工作空间下面的所有文件,打包生成一个tar文件,同时提供一个方法把该tar文件中的一些文件解压缩到指定的目录中 # tar = tarfile.open(r"C:\daytest_copy.zip","w") # tar.add(r"C:\Users\Administrator\PycharmProjects\s14\day4",arcname="tetsname") # tar.add(r"C:\day5_copy.zip")
12、Json and pickle序列化:
#Json 序列化 import json info = { "name":"jack", "age":23 } f = open("test.text","w") #print(type(json.dumps(info)),json.dumps(info)) f.write(json.dumps(info))#json.dumps将 Python 对象编码成 JSON 字符串 f.close()
#Json 反序列化 import json#支持所有语言,python,Java等,但json只能针对简单的python对象如字典,列表等。函数则不可以(pickle可以) f = open("test.text","r") data = json.loads(f.read())#json.loads 将已编码的 JSON 字符串解码为 Python 对象 print(data["age"])
#import json import pickle def sayhi(name): print("hello:",name) info = { "name":"jack", "age":23, "func":sayhi } f = open("test.text","wb") #print(type(json.dumps(info)),json.dumps(info)) #f.write(pickle.dumps(info))#json.dumps将 Python 对象编码成 JSON 字符串 pickle.dump(info,f)#等同于f.write(pickle.dumps(info)) f.close()
import pickle#pickle#pickle针对所有python对象,但仅限于python,java等不认识pickle def sayhi(name): print("hello:",name) f = open("test.text","rb") #data = pickle.loads(f.read())#json.loads 将已编码的 JSON 字符串解码为 Python 对象 data = pickle.load(f)#等同于data = pickle.loads(f.read()) print(data["func"]) print(data["func"]("jack"))
import json info = { "name":"jack", "age":23 } f = open("test.text","w") #print(type(json.dumps(info)),json.dumps(info)) f.write(json.dumps(info))#json.dumps将 Python 对象编码成 JSON 字符串 info["age"]=21 f.write(json.dumps(info)) f.close()
import json f = open("test.text","r") #data = pickle.loads(f.read())#json.loads 将已编码的 JSON 字符串解码为 Python 对象 data = json.load(f)#等同于data = pickle.loads(f.read()) print(data) #注:dump多次,load报错。尽量dump一次,load一次
import pickle#pickle针对所有python对象,但仅限于python,java等不认识pickle def sayhi(name): print("hello:",name) info = { "name":"jack", "age":23, "func":sayhi } f = open("test.text","wb") #print(type(json.dumps(info)),json.dumps(info)) f.write(pickle.dumps(info))#json.dumps将 Python 对象编码成 JSON 字符串 f.close()
import pickle#pickle#pickle针对所有python对象,但仅限于python,java等不认识pickle def sayhi(name): print("hello:",name) f = open("test.text","rb") data = pickle.loads(f.read())#json.loads 将已编码的 JSON 字符串解码为 Python 对象 print(data["func"]) print(data["func"]("jack"))
13、XML处理:
import xml.etree.ElementTree as ET #创建xml文档 new_xml = ET.Element("namelist")#根节点 name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})#子节点 age = ET.SubElement(name,"age",attrib={"checked":"no"}) sex = ET.SubElement(name,"sex") sex.text = ‘33‘ name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"}) age = ET.SubElement(name2,"age") age.text = ‘19‘ et = ET.ElementTree(new_xml) #生成文档对象 et.write("test_new.xml", encoding="utf-8",xml_declaration=True) ET.dump(new_xml) #打印生成的格式
import xml.etree.ElementTree as ET tree = ET.parse("test.xml")#解析文件 root = tree.getroot()#获取到根节点 print(root.tag)#打印根节点标签 #遍历xml文档 for child in root: print(child.tag, child.attrib)#child.attrib节点属性 for i in child: print(i.tag,i.attrib,i.text)#i.text节点文本 #只遍历year 节点 for node in root.iter(‘year‘): print(node.tag,node.text) #修改 for node in root.iter(‘year‘): new_year = int(node.text) + 1 node.text = str(new_year) node.set("updated","yes")#更新属性 tree.write("xmltest.xml") #删除node for country in root.findall(‘country‘): rank = int(country.find(‘rank‘).text) if rank > 50: root.remove(country) tree.write(‘output.xml‘)
14、configparser模块:
import configparser config = configparser.ConfigParser() config["DEFAULT"] = {‘ServerAliveInterval‘: ‘45‘, ‘Compression‘: ‘yes‘, ‘CompressionLevel‘: ‘9‘} config[‘bitbucket.org‘] = {} config[‘bitbucket.org‘][‘User‘] = ‘hg‘ config[‘topsecret.server.com‘] = {} topsecret = config[‘topsecret.server.com‘] topsecret[‘Host Port‘] = ‘50022‘ # mutates the parser topsecret[‘ForwardX11‘] = ‘no‘ # same here config[‘DEFAULT‘][‘ForwardX11‘] = ‘yes‘ with open(‘example.ini‘, ‘w‘) as configfile: config.write(configfile)
import configparser config = configparser.ConfigParser() config.read("example.ini") print(config.sections()) #读: section_name = config.sections()[1] print(config[section_name]["host port"]) #print(config.options(section_name)) #print(config.items(section_name)) #print("2312:",config.get(‘bitbucket.org‘,‘user‘)) for i,v in config[section_name].items(): print(i,v) #删除: config.remove_option(section_name,"forwardx11") config.write(open("example_new","w")) #修改: config.set(section_name,"host port","3000") config.write(open("example_new","w"))
15、hashlib模块:
import hashlib m = hashlib.md5() m.update(b"jack") print(m.hexdigest()) m.update(b"rose") print(m.hexdigest()) m2 = hashlib.md5() m2.update(b"jackrose") print(m2.hexdigest()) hash2 = hashlib.sha256() hash2.update(b"jackrose") print(hash2.hexdigest()) hash3 = hashlib.sha512() hash3.update(b"jackrose") print(hash3.hexdigest()) import hmac #hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密 h = hmac.new(b"jack", b"rose") print(h.hexdigest())
16、logging模块:
import logging logging.basicConfig(filename=‘example.log‘,level=logging.INFO, format=‘%(asctime)s %(filename)s %(lineno)d - %(levelname) s%(message)s‘, datefmt=‘%m/%d/%Y %I:%M:%S %p‘)#日志写到文件 #level=loggin.INFO,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件 #format=‘%(asctime)s %(message)s‘, datefmt=‘%m/%d/%Y %I:%M:%S %p‘,日志格式加上时间 #livel级别:debug<info<error<warning<critical logging.warning("user [alex] attempted wrong password more than 3 times") logging.critical("server is down") logging.info("test info") logging.debug("test debug") logging.error("test error")
#多输出: import logging #create logger logger = logging.getLogger(‘TEST-LOG‘) logger.setLevel(logging.DEBUG) # create console handler and set level to debug ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # create file handler and set level to warning fh = logging.FileHandler("access.log") fh.setLevel(logging.WARNING) # create formatter formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘) # add formatter to ch and fh ch.setFormatter(formatter) fh.setFormatter(formatter) # add ch and fh to logger logger.addHandler(ch) logger.addHandler(fh) # ‘application‘ code logger.debug(‘debug message‘) logger.info(‘info message‘) logger.warn(‘warn message‘) logger.error(‘error message‘) logger.critical(‘critical message‘)
#文件自动截断: import logging from logging import handlers logger = logging.getLogger("timelog.log") log_file = "timelog.log" # fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3,encoding="utf-8") fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3,encoding="utf-8") formatter = logging.Formatter(‘%(asctime)s %(module)s:%(lineno)d %(message)s‘) fh.setFormatter(formatter) logger.addHandler(fh) import time time.sleep(2) logger.warning("test1") time.sleep(2) logger.warning("test12") time.sleep(2) logger.warning("test13") logger.warning("test14")
17、re正则表达式:
见:http://www.cnblogs.com/alex3714/articles/5161349.html
以上是关于python学习(day5)的主要内容,如果未能解决你的问题,请参考以下文章