常用模块的使用
1. time模块
import time
*一*
-----------------------------------------------------------------------------
res1=time.localtime(654126574)
print(res1 )
-----------------------------------------------------------------------------
res2=time.strftime('%Y-%m-%d %H:%M:%S',res1)
print(res2)
----------------------------------------------------------------------------
*二*
res1=time.strptime('1990-09-24 05:49:34','%Y-%m-%d %H:%M:%S')
print(res1)
----------------------------------------------------------------------
res2=time.mktime(res1)
print(res2)
三
import datetime
print(datetime.datetime.now())
print(datetime.date.fromtimestamp(time.time()) )
print(datetime.datetime.now() + datetime.timedelta(3))
print(datetime.datetime.now() + datetime.timedelta(-3))
print(datetime.datetime.now() + datetime.timedelta(hours=3))
print(datetime.datetime.now() + datetime.timedelta(minutes=30))
c_time = datetime.datetime.now()
print(c_time.replace(minute=3,hour=2))
2.radom模块
import random
print(random.random())
print(random.randint(1,3))
print(random.randrange(1,3))
print(random.choice([1,'23',[4,5]]))
print(random.sample([1,'23',[4,5]],2))
print(random.uniform(1,3))
item=[1,3,5,7,9]
random.shuffle(item)
print(item)
def make_radom(k):
dic=''
for i in range(k):
s1=str(random.randint(0,9))
s2=chr(random.randint(65,90))
dic += random.choice([s1,s2])
return dic
print(make_radom(4))
3.OS模块
os.getcwd()
os.chdir("dirname")
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False path可以是文件也可以是文件夹
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path)
os.path.isdir(path)
os.path.join(path1[, path2[, ...]])
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
4.sys模块
1 sys.argv
2 sys.exit(n) 退出程序,正常退出时exit(0)
3 sys.version 获取Python解释程序的版本信息
4 sys.maxint 最大的Int值
5 sys.path
6 sys.platform 返回操作系统平台名称
5.shutil模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中
1 import shutil
2
3 shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))
shutil.copyfile(src, dst)
拷贝文件
1 shutil.copyfile('f1.log', 'f2.log')
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
1 shutil.copymode('f1.log', 'f2.log')
shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
1 shutil.copystat('f1.log', 'f2.log')
shutil.copy(src, dst)
拷贝文件和权限
1 import shutil
2
3 shutil.copy('f1.log', 'f2.log')
shutil.copy2(src, dst)
拷贝文件和状态信息
1 import shutil
2
3 shutil.copy2('f1.log', 'f2.log')
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹
1 import shutil
2
3 shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
拷贝软连接
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
1 import shutil
2
3 shutil.rmtree('folder1')
shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。
1 import shutil
2
3 shutil.move('folder1', 'folder3')
压缩打包文件
import shutil
ret = shutil.make_archive('./xxx', 'gztar', root_dir=r'G:\pycharmproject\ATM')
解压
import tarfile
t=tarfile.open("xxx.tar.gz",'r')
t.extractall(r'G:\pycharmproject\day14\aaa')
t.close()
6.json&pickle模块
序列化
import json
str_json = json.dumps({"x":1,'y':2,'z':True,'a':None})
print(str_json)
dic = json.loads(str_json)
print(dic)
import json
dumps loads 操作的是字符串类型
直接写到a.json里面
json.dump({"x":1,'y':2,'z':True,'a':None},open('a.json',mode='wt',encoding='utf-8'))
读出来一句话搞定
dic = json.load(open('a.json',mode='rt',encoding='utf-8'))
print(dic)
dump load 操作的是字典类型
=====================================> pickle只适用于python,但是可以支持所有python的数据类型
import pickle
res_pkl = pickle.dumps({"x":1,'y':2,'z':True,'a':None})
print(res_pkl)
dic = pickle.loads(res_pkl)
print(dic)
import pickle
pickle.dump({"x":1,'y':2,'z':True,'a':None},open('a.pkl',mode='wb'))
dic = pickle.load(open('a.pkl',mode='rb'))
print(dic)
import pickle
import json
res = json.dumps({1,2,3,4,5,6})
print(res)
7. shelve模块
shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型
import shelve
f=shelve.open(r'sheve.txt')
print(f['stu1_info']['hobby'])
f.close()
8.xml模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。
9. configparser模块
[section1]
k1 = v1
k2:v2
user=egon
age=18
is_admin=true
salary=31
[section2]
k1 = v1
import configparser
config=configparser.ConfigParser()
config.read('a.cfg')
res=config.sections()
print(res)
options=config.options('section1')
print(options)
item_list=config.items('section1')
print(item_list)
val=config.get('section1','user')
print(val)
val1=config.getint('section1','age')
print(val1)
val2=config.getboolean('section1','is_admin')
print(val2)
val3=config.getfloat('section1','salary')
print(val3)
import configparser
config=configparser.ConfigParser()
config.read('a.cfg',encoding='utf-8')
config.remove_section('section2')
config.remove_option('section1','k1')
config.remove_option('section1','k2')
print(config.has_section('section1'))
print(config.has_option('section1',''))
config.add_section('egon')
config.set('egon','name','egon')
config.set('egon','age',18)
config.write(open('a.cfg','w'))
10. hashlib模块
11.suprocess模块
import subprocess
obj=subprocess.Popen("tasklist",shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
print(obj)
print(obj.stdout.read().decode('gbk'))
print(obj.stderr.read().decode('gbk'))
12.logging模块
CRITICAL = 50
ERROR = 40
WARNING = 30
INFO = 20
DEBUG = 10
NOTSET = 0
logger:产生日志的对象
Filter:过滤日志的对象
Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端
Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式
%(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:用户输出的消息
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'格式1': {
'format': '%(asctime)s %(name)s %(filename)s:%(lineno)d %(levelname)s:%(message)s'
},
'格式2': {
'format': '%(asctime)s :%(message)s'
},
},
'filters': {},
'handlers': {
'屏幕': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': '格式2'
},
'文件': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'formatter': '格式1',
'filename': DESC_dir,
'encoding': 'utf-8',
},
},
'loggers': {
'': {
'handlers': ['屏幕','文件'],
'level': 'DEBUG',
'propagate': False,
},
},
}
import logging.config
from conf import settings
logging.config.dictConfig(settings.LOGGING_DIC)
def log(msg,name,level='info'):
logger = logging.getLogger(name)
if level == 'info':
logger.info(msg)
elif level == 'debug':
logging.debug(msg)
elif level == 'warn':
logger.warning(msg)
elif level == 'error':
logger.error(msg)
elif level == 'critical':
logger.critical(msg)