Python模块


time模块

#调用模块:import+模块名

import time;

#获取当前时间戳 linux从70到38的毫秒数

print(time.time());#此方法计算系统执行的时间

#休眠当前线程,阻塞住当前的线程,单位是秒

time.sleep(5);
print('休眠结束')

#单位为秒,例如:1.5e-06 科学计数法,1.5*10^6

#计算cpu执行时间

print(time.clock())

#获取世界标准时间

print(time.gmtime())

#获取本地时间,结果为元组tuple

print(time.localtime())

#格式化时间y:年 m:月 d:日 H:时 M:分 S:秒 将时间元组转换成为有格式的字符串

print(time.strftime('%y-%m-%d %H:%M:%S',time.localtime()))

#将格式字符串转换为元组,好处是可以通过索引分别获取每个元组

print(time.strptime('18-10-23 15:00:07','%y-%m-%d %H:%M:%S'))

#ctime将时间戳转换成时间字符串类型 CHAR(字符串) CDATA(XML中的数据:)节点的内容如果为字符串

CDATA
print(time.ctime(time.time()))

random模块

#调用模块

import random

#生成0~1之间的随机数 包含小数

print(random.random())

#获取一个范围之中的随机整数 既包含a 又包含b

print(random.randint(0,10))

#随机选择序列中的元素

print(random.choice([1,2,3,4,5,6,7]))

#randrange(a,b) a~b之间的随机整数 不包含b

print(random.randrange(0,10))

os模块


#调用操作系统的模块 是重点

import os#自适应操作系统

#获取当前py文件运行的目录

print(os.getcwd());

#切换目录 cd

os.chdir('F:\\Demo\\demo4');

#获取当前目录 python . ..

print(os.curdir);

#上一级目录 ..

print(os.pardir);

#创建目录

os.mkdir('我是目录')

#删除目录的操作必须是空目录 Linux rm

os.rmdir('我是目录')

#创建嵌套的目录

os.makedirs('我是目录/demo/demo1')

#删除嵌套的目录

os.removedirs('我是目录/demo/demo1')

#展示当前目录下的所有文件和目录 组装成为一个列表

lists=os.listdir('F:\\Demo\\demo4')
print(lists)

#删除文件

os.remove('HelloWorld')
os.rename('../demo3','demo7')

#查看文件的详细信息

print(os.stat('内置函数.py'))

#文件分隔符 windows:\ Linux:/

print(os.sep)

#文件分隔符字符串 环境变量; Linux:

print(os.pathsep)

#行的终止符 \n

print(os.linesep)

#直接执行shell命令的方法 windows gbk python utf-8

os.system('ipconfig')

#获取系统环境变量 封装成了字典

print(os.environ)

#获取文件的绝对路径

print(os.path.abspath('内置函数.py'))

#将文件名和目录以元组的形式进行分割

print(os.path.split('F:\Demo\demo4\内置函数.py'))

#获取文件的目录名

print(os.path.dirname('F:\Demo\demo4\内置函数.py'))

#获取文件名

print(os.path.basename('F:\Demo\demo4\内置函数.py'))

#判断改文件是否存在

print(os.path.exists('F:\Demo\demo4\内置函数1.py'))

#判断是否为目录

print(os.path.isdir('F:\Demo\demo4'))

#将两个路径组合在一起输出

print(os.path.join('F:\Demo\demo4','demo5\demo6'))

re模块


#操作正则表达式

import re
str='aa38bb56'

#\d 0~9
#findall方法:通配整个字符串 直到到字符串的末尾 把所有符合的条件的字符都获取出来

result=re.findall('\d{2}',str)
print(result)

#search 检索

str=r'D:\hehe.txt'; #取消掉\的特殊语义

#search只通配一次

str=re.search('^\w+@\w+\.\w+$','[email protected]')
print(str.group())#返回的是字符串

#正则分组 组名:name

strs=re.search('(?P\w{3})','cmy')

#根据组名获取数据

print(strs.group('name'))

#只有一次

result=re.match('ABC','ABC1234ABC')
print(result.group())

#按照表达式将字符串分割为列表

lists=re.split('\.','a.b.c.d')
print(lists)

#将字符串中的一部分替换为另一部分

print(re.sub('a','呵呵','aabbcc'))

#面向对象的思想 compile方法生成了一个正则表达式对象

reg=re.compile('^(1[0-2]\d)|(\d{1,2})$')
g=reg.search('-5')
print(g.group())

configparse模块


#生成一个ini的配置文件
#导入模块

import configparser

#生成文件句柄

config=configparser.ConfigParser()

#生成配置组 ini 文件 [mysqld] default-character-set=utf-8 skip-grant-all

mysql:my.ini文件
config['namespace']={ #K,V
     'name':'zhangsan',
     'age':18
}

#在ini文件中 默认的配置组 [DEFAULT]

with open('example.ini','a',encoding='utf-8') as file:
    config.write(file);

#读取ini文件中内容

config.read('example.ini');

#调用sections方法生成字典的结构数据 发现只有一个namespace组 没有

DEFAULT组
print(config.sections());

#打印DEFAULT组的内容

od=config.defaults()#有序列表
for k,v in od.items():
    print("key:%s,Value:%s"%(k,v))
print(config['namespace']['name'])

#打印[DEFAULT] 配置组下的配置信息

print(config['DEFAULT']['port'])

hashlib加密模块


#通过算法加密 为了保证数据在传输的过程中安全性 序列化(程序传输数据的一种方式)
#rsa git() Linux(ssh免密码登录)
#md5 号称世界上安全性最高的加密算法 不可逆 md5在线解密器
#BASE 64 可逆

import hashlib

#m对象 一个加密器

m=hashlib.sha256();

#加密设置字符集

m.update('cmy'.encode('utf-8'))

#输出密文

print(m.hexdigest())
#sha256

logging模块


#log 日志文件 .log 文件作为后缀 日志也是解决bug非常好的方式

#设置日志的输出级别

import logging
#K:V

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'.encode('utf-8'),
                    filemode='w')

logging.debug('debug')
logging.info('info')
logging.warning('waring')
logging.error('error')
logging.critical('critical')

#获取日志对象

logger=logging.getLogger('debug');

#配置日志文件的handler

fh=logging.FileHandler('logging.log');

#配置Console的Hanlder

sh=logging.StreamHandler();

#日志打印的格式

format=logging.Formatter('%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s');
fh.setFormatter(format)
sh.setFormatter(format);

#存回Logger对象

logger.addHandler(fh);
logger.addHandler(sh)

#输出了五个级别 3个级别会在Console上

logger.debug('debug')
logger.info('info')
logger.warning('waring')
logger.error('error')
logger.critical('critical')

sys模块


#python程序的命令行参数

import sys

#第一个参数是PY文件的绝对路径

print(sys.argv)

#返回的是PYTHON程序中模块的搜索路径 一个模块就是一个.py文件(寻找解释器中内置的.py文件)

print(sys.path)

#PYTHON解释器的版本

print(sys.version)

#获取到PYTHON程序所能接受的最大整数值 ±

print(sys.maxsize)

#返回操作系统的平台名称 win7 32 位

print(sys.platform)

#退出程序 强制关闭python程序的运行

#sys.exit(0)
#input 允许用户从Console输入
sys.stdout.write('please:')

#打印readline获取的列表中的所有元素

value=sys.stdin.readline()[:-1]
print('您输入了:%s'%value)
#print('程序还没退出')

json模块


#序列化模块:什么叫 序列化:序列化 是程序传输数据的一种手段,比如:内存→硬盘 硬盘→内存 线程→线程
#持久化:将程序内存中的数据保存在硬盘上
#通过json模块 将内存中的数据持久的保存在硬盘上的某个文件中

import json

#字典变量

dicts={'name':'zhangsan','age':18};
#二进制的数据内容
data=json.dumps(dicts);
with open('data','w',encoding='utf-8') as file:
    #调用write方法写入文件
    file.write(data);

#反序列化:序列化取反的意思 内存到硬盘(序列化) 硬盘到内存(反序列化)

f=open('data','r',encoding='utf-8');
data=f.read();

#将字典获取出来

dicts=json.loads(data);
print(dicts)

#序列化和反序列化的操作 省略write和read操作 交给Python底层去实现

#序列化的数据

str='hiahia';
file=open('data','w',encoding='utf-8');
json.dump(str,file);

file=open('data','r',encoding='utf-8');
name=json.load(file);
print(name);

shelve模块


import shelve #比json更简单 只能是字典格式的 且key必须是字符串

#文件对象 无需借助open函数创建文件对象

file=shelve.open('shelve');
'''
#.bak dat dir
file['info']={'name':'张三'};
'''

#反序列化

data=file.get('info');
print(data);#shelve和json相比 操作更简单  且数据的安全性更高