import time
#一 时间戳<---->结构化时间: localtime/gmtime mktime
>>> time.localtime(3600*24)
>>> time.gmtime(3600*24)
>>> time.mktime(time.localtime())
#字符串时间<---->结构化时间: strftime/strptime
>>> time.strftime("%Y-%m-%d %X", time.localtime())
>>> time.strptime("2017-03-16","%Y-%m-%d")
★★★★★ ★★★★★
import random
# a=random.random() # 大于0且小于1之间的小数
# print(a)
# a=random.randint(1,5) # 大于等于1且小于等于5之间的整数,即顾头也顾尾
# print(a)
# a=random.randrange(1,3) # 大于等于1且小于3之间的整数,顾头不顾尾
# print(a)
# a=random.choice([1,‘23‘,[4,5]]) # #1或者23或者[4,5],随机取一个,里面可以是数字,字符串和列表
# print(a)
# a=random.sample([1,‘23‘,[4,5]],2) # #列表元素任意2个组合,随机取两个,里面可以是数字,字符串和列表
# print(a)
# a=random.uniform(1,3) #大于1小于3的小数
# print(a)
# item=[1,3,5,7,9]
# random.shuffle(item) # 打乱次序
# print(item)
★★★★★
import hashlib
# md5 = hashlib.md5()
# md5.update(b‘hello‘) #这里记得一定要加b,在python3中,在update括号里面记得加b;
# print(md5.hexdigest()) #update是累加的过程,可以多次被调用,括号内还可是一句话,可看老师博客
# 计算结果如下:
# 5d41402abc4b2a76b9719d911017c592
# md5=hashlib.sha512()
# md5.update(b‘123aaa‘)
# print(md5.hexdigest())
#打印结果为:442c78a39ee20a1bc0912d3f8b85febd198b323b0843c952ac8c968148a59ba033cefcfc0dddf0632291bc3a62baa3bab9ba0b04dccd63570307a83582259fe9
# obj=hashlib.md5(‘salt‘.encode(‘utf-8‘))
# obj.update(b‘admin‘)
# print(obj.hexdigest())
#打印结果为:c657540d5b315892f950ff30e1394480
# obj=hashlib.md5(‘sdfds2134‘.encode(‘utf-8‘))
# obj.update(b‘admin‘) #表明上面还可以随机写东西,但是没有深究,以后用到再说
# print(obj.hexdigest())
#打印结果为:c7621ca3e95c018b3be4d241c229ab24
★★★★★
import sys
print(sys.path)
#打印结果为:[‘E:\\pythonS5\\june\\模块整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘]
#E:\\pythonS5\\june\\模块整理‘,这个表示会把当前所执行文件的目录,添加到sys.path里面
# 重点记住前面的路径:,前面的是当前所执行文件的目录,会添加到sys.path里面,后面的python环境所有的路径
# a=sys.argv #命令行参数List,第一个元素是程序本身路径,是一个列表的形式
# a1=sys.argv[0]
# print(a) #打印结果为:[‘E:/pythonS5/june/模块整理/各种模块.py‘]
# print(a1) #打印结果为: E:/pythonS5/june/模块整理/各种模块.py
# print(111) #这行代码正常打印执行
# sys.exit(0) #退出程序,正常退出时exit(0) 自己测试了里面没有0也能执行,用的时候看情况
# print(112) #次行代码不会执行,因为上调命令以退出
# a=sys.version # 获取Python解释程序的版本信息
# print(a) #打印结果为:所用的python的版本信息,3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
# print(sys.path)#打印结果为:[‘E:\\pythonS5\\june\\模块整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘]
# b_dir=r‘E:\pythonS5\July‘ #这里r写不写,都能实现,这个效果,因不知道啥时候需要加r,所以一直就用着r就行
# sys.path.append(b_dir) #因sys.path是个列表,所以可以用append进行追加,追加进去的路径,可以调用不同目录的模块
# print(sys.path) #打印结果为:[‘E:\\pythonS5\\june\\模块整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘, ‘E:\\pythonS5\\june‘]
#很明显已经把‘E:\\pythonS5\\July‘这个路径加入到当前的环境变量下面了。
# a=sys.platform # 返回操作系统平台名称
# print(a) #打印结果为:win32
# ★★★★★
# ★★★★★
import logging #日志模块
# 下面5个级别,越往下越高
# logging.debug(‘debug message‘)
# logging.info(‘info message‘)
# logging.warning(‘warning message‘)
# logging.error(‘error message‘)
# logging.critical(‘critical message‘)
# logging.basicConfig(level=logging.DEBUG,
# format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
# filename=‘log.txt‘, #在当前路径下直接选择的是相对路径,也可以选择绝对路径,因此会在当前路径下产生一个log的文件
# filemode=‘a‘,) #a表示:追加,也可用w表示:写,即可追加到或写入这个文件中。
# logging.debug(‘debug message‘)
# logging.info(‘info message‘)
# logging.warning(‘warning message‘)
# logging.error(‘error message‘)
# logging.critical(‘critical message‘)
#就这样,就把上面的信息追加到log.txt文件里面了
#下面这些参数都是关键字的,都是固定的, 不可修改,用那个,就使用那个就行
# logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
# filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
# filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
# format:指定handler使用的日志显示格式。
# datefmt:指定日期时间格式。
# level:设置rootlogger(后边会讲解具体概念)的日志级别
# stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
#
# format参数中可能用到的格式化串:
# %(name)s Logger的名字
# %(levelno)s 数字形式的日志级别
# %(levelname)s 文本形式的日志级别
# %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
# %(filename)s 调用日志输出函数的模块的文件名
# %(module)s 调用日志输出函数的模块名
# %(funcName)s 调用日志输出函数的函数名
# %(lineno)d 调用日志输出函数的语句所在的代码行
# %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
# %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
# %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
# %(thread)d 线程ID。可能没有
# %(threadName)s 线程名。可能没有
# %(process)d 进程ID。可能没有
# %(message)s用户输出的消息
# 另一种方式 是logger对象 相比上面的basicconfig来说,我们推荐使用logger,因为更加灵活,他们两者地位平等。
# def get_logger():
# logger_obj=logging.getLogger() #获取这个logger对象
# print(type(logger_obj))
# fh=logging.FileHandler("logger_file.txt")#文件输出流,创建了一个这个文件
# fh.setLevel(logging.ERROR)
# ch=logging.StreamHandler() #StreamHandler不需要参数
# ch.setLevel(logging.CRITICAL)
#
# formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)
# fh.setFormatter(formatter) #设置成formatter的格式
# ch.setFormatter(formatter) #同上
# logger_obj.addHandler(fh)
# logger_obj.addHandler(ch)
#
# logger_obj.setLevel(logging.DEBUG)#在这里定义级别
# return logger_obj
#
# logger_obj=get_logger()
#
# logger_obj.info("info")
# logger_obj.error("error")
# logger_obj.warning("warning")
# logger_obj.debug("debug")
# logger_obj.critical("critical")
★★★★★
import json #json里面老师讲课时候说用双引号,而且序列化之后的结果都是双引号的
# dic={‘name‘:‘hao‘,‘age‘:11}
# f=open(‘123.txt‘,‘w‘)
# data=json.dumps(dic)
# f.write(data)
# f.close()
#这样就把字典的信息序列化到123这个文件中了
# f=open(‘123.txt‘,‘r‘)
# data=f.read()
# dic=json.loads(data)
# print(dic) #打印结果为:{‘name‘: ‘wuhao‘, ‘age‘: 11}
#这样就反序列化出来了
##############
# 上面用的是dumps和loads,下面请看dump和load,比上面更加简洁
# dic={‘name‘:‘hao‘,‘age‘:11}
# f=open(‘666.txt‘,‘w‘)
# json.dump(dic,f)# 这一步就相当于省略了:data=json.dumps(dic)和f.write(data),直接进行序列化
###上面括号中的dic是要序列化的对象
# f.close()
##下面进行反序列化
# f=open(‘666.txt‘,‘r‘)
# dic=json.load(f)
# print(dic)
★★★★★
##----------------------------序列化
import pickle #和json模块用法一样
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‘])
★★★★★
import shelve
# d = shelve.open(‘shelve_test‘) # 打开一个文件
# name=[‘allen‘,14,‘male‘]
# d[‘alex‘]=name #会写入到文件中
# d.close()
#读出文件内容
# d = shelve.open(‘shelve_test‘) # 打开一个文件
# print(d[‘alex‘]) #[‘allen‘, 14, ‘male‘]
# d.close()
★★★★★
# import subprocess #下面的dir是一个命令,
# s=subprocess.Popen(‘dir‘,shell=True,stdout=subprocess.PIPE) # Popen是一个类 ,开启新的子进程服务
#stdout是输出的意思,还有stderr是输入的意思,后期用到了再说,基本形式也是stderr=subprocess.PIPE这种
# print(s.stdout.read().decode(‘gbk‘))
#打印结果为:下面的
# 驱动器 E 中的卷没有标签。
# 卷的序列号是 0004-DF53
#
# E:\pythonS5\june\模块整理 的目录
#
# 2017/07/15 周六 下午 10:48 <DIR> .
# 2017/07/15 周六 下午 10:48 <DIR> ..
# 2017/07/15 周六 下午 10:48 14,183 各种模块.py
# 1 个文件 14,183 字节
# 2 个目录 68,064,280,576 可用字节
###
# 在linux:
# import subprocess
# subprocess.Popen(‘ls -l‘,shell=True)
#subprocess.Popen([‘ls‘,‘-l‘]) 看下面和上面的区别,下面是一个列表的话,就不用写这个shell=True了
stdin 标准输入
stdout 标准输出
stderr 标准错误
★★★★★
★★★★★
# configparser 做文件的读与写操作
# import configparser #有它自己的格式,
# cfp=configparser.ConfigParser() # 相当于{}
# cfp["DEFAULT"]={"ServerAliveInterval":45,"Compression":"YES","CompressionLevel":9,"ForwardX11":"YES"}
# cfp["bitbucket.org"]={"USER":"hg"}
# cfp["topsecret.server.com"]={"Port ":5000123,"ForwardX11 ":"no"}
# with open("cfp.ini","w") as f:
# cfp.write(f) #这样就会生成一个cfp.ini文件,里面有这些字典的内容
# 下面是cfp.ini文件中的内容
# """
# [DEFAULT] #这个字段是默认的(也就是必须写成[DEFAULT]),就相当于类里面的共同特征,下面两个字段都拥有这个[DEFAULT]字段的内容
# serveraliveinterval = 45
# compression = YES
# compressionlevel = 9
# forwardx11 = YES
#
# [bitbucket.org]
# user = hg
# [topsecret.server.com]
# port = 5000123
# forwardx11 = no
# """
#进行增删改查操作
# import configparser
# cfp=configparser.ConfigParser()
# cfp.read("cfp.ini") #这个是要读的文件
# print(cfp.sections()) # 查每个的字段名字,也就是最外层的键,这个打印没有默认字段,默认的不需要打印
# print("topsecret.server.coms" in cfp) 判断这个字段,在不在cfp中,若在则True
# print(cfp.items("bitbucket.org")) #取出所有的键值对,包括默认的和自己本身的
# print(cfp.options("bitbucket.org")) 取到所有键值对中的键
#print(cfp["bitbucket.org"]["user"]) 得到的结果是hg,就是根据字典取值方式进行取值,通过bitbucket.org"里面的user,取到hg
# 用这个可以直接做三次登录,判断在不在这个里面即可,in不in这里面
★★★★★
re模块在正则中整理