常用模块
# 模块:本质就是一个.py文件 # 分为三部分:内置模块、第三方模块、自定义模块(模块调用、包) # 时间模块 import time print(time.time())#返回当前时间的时间戳(秒)1970年到现在
"""
1550635172.8624272
""" print(time.localtime(20000000))#时间戳转化结构化时间,括号里不写默认是time.time()
"""
time.struct_time(tm_year=1970, tm_mon=8, tm_mday=20, tm_hour=19, tm_min=33, tm_sec=20, tm_wday=3, tm_yday=232, tm_isdst=0)
"""
print(time.gmtime(20000000))#时间戳转化结构化时间 UTC时间,和尚面的差了八个小时
"""
time.struct_time(tm_year=1970, tm_mon=8, tm_mday=20, tm_hour=11, tm_min=33, tm_sec=20, tm_wday=3, tm_yday=232, tm_isdst=0)
"""
print(time.mktime(time.localtime()))#结构化时间转化成时间戳
"""
1550635413.0
"""
print(time.strptime("2017-06-06","%Y-%m-%d"))#字符串时间转结构化时间
"""
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=157, tm_isdst=-1)
"""
print(time.strftime("%Y-%m-%d", time.localtime()))#结构化时间转字符串时间
"""
2019-02-20
"""
print(time.strftime("%Y-%m-%d", time.localtime(2000000)))#时间戳转化结构化时间再转成字符串时间
"""
1970-01-24
"""
print(time.mktime(time.strptime("2017-06-06","%Y-%m-%d")))#字符串时间转结构化时间再转时间戳 """
1496678400.0
"""
print(time.asctime(time.localtime(312343423)))#结构化时间转成字符串时间
"""
Sun Nov 25 10:03:43 1979
"""
print(time.ctime(312343423))#时间戳转成字符串时间
"""
Sun Nov 25 10:03:43 1979
"""
# time.sleep(3)#线程推迟指定的时间运行,单位为秒,不占用内存 # 时间戳是计算机能够识别的时间 # 时间字符串是人能够看懂的时间 # 时间元组(结构化时间)则是用来操作时间的 #把字符串时间加三天然后输出 # s='2017-06-06' # def change(s,d): # t1=time.strptime(s,"%Y-%m-%d")#字符串时间转结构化时间 # t2=time.mktime(t1)#结构化时间转化成时间戳 # t3=t2+3600*24*d#时间戳加d天 # t4=time.strftime("%Y-%m-%d", time.localtime(t3))#结构化时间转字符串时间 # print(t4) # change(s,3) #随机数模块 import random # print(random.random()) # (0,1) float # print(random.randint(1,3)) # [1,3] int # print(random.randrange(1,3)) # [1,3) int # print(random.choice([12,23,"hello"])) # print(random.sample([12,23,"hello",123],2))#取列表随机的两项 # print(random.uniform(1,3)) # float # # l=[111,222,333,444] # random.shuffle(l) # print(l) # 练习:验证码 # def valdate(): # res='' # for i in range(5): # f=random.randint(0,9) # f1=chr(random.randint(97,122)) # f2=chr(random.randint(65,90)) # s=random.choice([str(f),f1,f2]) # res+=s # return res # print(valdate()) # 摘要算法 import hashlib # md5 = hashlib.md5() # md5 = hashlib.md5('hello'.encode('utf-8'))#加盐,最大程度避免撞库 # md5.update(b'hello')#摘要的内容,数据量大可以多次调用update # md5.update(b'world') # print(md5.hexdigest())返回一个十六进制32位的数字 #摘要算法应用:文件一致性校验,登录 #os模块 import os # print(os.getcwd())#获取当前目录的路径 # os.chdir("D:\py3.6保存代码\py_fullstack_s5\dirname33\dirname2")#改变当前脚本工作目录 # f=open('text2.txt','w') # os.makedirs('dirname1/dirname2')#生成递归目录 # os.removedirs('dirname1')#递归删除空目录 # os.mkdir('dirname1')#生成单目录 # os.rmdir('dirname')#删除单级空目录 # print(os.listdir('dirname1'))#列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 # os.remove('dirname1/1.py')#删除一个文件 # os.rename('dirname1','dirname33')#重命名文件/目录 # print(os.stat('dirname33'))#获取文件/目录信息 # print(os.path.abspath('dirname33'))#返回path规范化的绝对路径 # print(os.path.split('D:\py3.6保存代码\py_fullstack_s5\dirname33'))#把path分成两个元组返回 # print(os.path.dirname('D:\py3.6保存代码\py_fullstack_s5\dirname33'))#返回上级目录的绝对路径 # print(os.path.basename('D:\py3.6保存代码\py_fullstack_s5\dirname33'))#返回path最后一个元素 # print(os.path.exists('dirname33'))#如果path存在,返回True;如果path不存在,返回False # s1='D:\py3.6保存代码\py_fullstack_s5' # s2='dirname33' # print(os.path.join(s1,s2))#将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 # print(os.path.getatime('dirname33'))#返回path所指向的文件或者目录的最后存取时间(时间戳) # print(os.path.getctime('dirname33'))#返回path所指向的文件或者目录的最后修改时间(时间戳) # print(os.path.getsize('dirname33'))#返回path的大小
# import sys #----sys.exit() # count=1 # while count<10: # print(count) # if count==8: # sys.exit() # count+=1 # print("ending") #----sys.argv # import sys # ret=sys.argv #[sys模块.py',"egon",666] # print(ret) # username=ret[1] # password=ret[2] # if username=='egon'and password=='666': # print('login success') #----sys.path # import sys # print(sys.path)# [“C:\Users\Administrator\PycharmProjects\python5期\day13”,"python环境"] :执行文件的目录会添加到sys.path # Base_dir=r"C:\Users\Administrator\PycharmProjects\python5期\day12" # sys.path.append(Base_dir) # import lesson1 # lesson1.foo() # import logging # 级别从低到高 # logging.debug('debug message') # logging.info('info message') # logging.warning('warning message') # logging.error('error message') # logging.critical('critical message') # 显示了大于等于WARNING级别的日志,说明默认的日志级别设置为WARNING # 默认的日志格式为日志级别:Logger名称:用户输出消息 # import logging # 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='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模块默认行为,可用参数有 # level:设置rootlogger(后边会讲解具体概念)的日志级别 # format:指定handler使用的日志显示格式。 # datefmt:指定日期时间格式。 # filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。 # filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。 # format参数中可能用到的格式化串: # %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 # %(filename)s 调用日志输出函数的模块的文件名 # %(lineno)d 调用日志输出函数的语句所在的代码行 # %(levelname)s 文本形式的日志级别 # %(message)s用户输出的消息 # import logging # logger = logging.getLogger()#获取一个logger对象,返回给一个名字 # fh = logging.FileHandler('test.log')# 创建一个handler,用于写入日志文件 # ch = logging.StreamHandler()# 再创建一个handler,用于输出到控制台 # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')#指定日志显示格式 # fh.setFormatter(formatter)#设置成这个格式 # ch.setFormatter(formatter) # logger.addHandler(fh) #logger对象可以添加多个fh和ch对象 # logger.addHandler(ch) # logger.setLevel(logging.DEBUG)#设置优先级 # logger.debug('logger debug message') # logger.info('logger info message') # logger.warning('logger warning message') # logger.error('logger error message') # logger.critical('logger critical message') # import json #序列化 # dic={'name':'wuhao','age':22} # print(type(dic))#<class 'dict'> # data=json.dumps(dic) # print("type",type(data))#<class 'str'> # print("data",data) # f=open('json_data.txt','w') # f.write(json.dumps(dic))#等价于json.dump(dic,f) # f.close() #反序列化 # f=open('json_data.txt','r') # dic=json.loads(f.read()# 等价于data=json.load(f) # print(dic) # import pickle # 序列化 # dic = {'name': 'alvin', 'age': 23, 'sex': 'male'} # print(type(dic)) # <class 'dict'> # j = pickle.dumps(dic) # print(type(j)) # <class 'bytes'> # f = open('序列化对象_pickle', 'wb') # 注意是w是写入str,wb是写入bytes,j是'bytes' # f.write(j) # 等价于pickle.dump(dic,f) # f.close() # 反序列化 # import pickle # f = open('序列化对象_pickle', 'rb') # data = pickle.loads(f.read()) # 等价于data=pickle.load(f) # print(data['age'])