首页 > 代码库 > 各个模块整理

各个模块整理

import time

#一 时间戳<---->结构化时间:  localtime/gmtime   mktime

 

>>> time.localtime(3600*24)

>>> time.gmtime(3600*24)

 

>>> time.mktime(time.localtime())

 

 

#字符串时间<---->结构化时间: strftimestrptime

 

>>> 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=http://www.mamicode.com/json.dumps(dic)

# f.write(data)

# f.close()

#这样就把字典的信息序列化到123这个文件中了

# f=open(‘123.txt‘,‘r‘)

# data=http://www.mamicode.com/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=http://www.mamicode.com/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=http://www.mamicode.com/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模块在正则中整理

 

各个模块整理