包的使用和常用模块
今天我们主要学习了常用模块中的 time,random,os,sys,shutil,json,pickle,logging 以及应用
1,包的使用
包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来,提高程序的结构性和可维护性
包相关导入语句分为import和from....import...两种
(1)import导入文件时,产生的名称空间中的名字来自于文件,import包,产生的名称空间的名字同样来自于文件,即包下的__init__.py 导入包本质导入该文件、
单独导入包名称时不会导入包中所有包含的所有子模块,执行文件与示范文件在同级目录下
(2)包的使用之from。。。import
需要注意的是from后import导入的模块,必须是一个明确的不能带点,没有前缀,包内模块直接导入应该使用from。。import
注意,左边必须是包,import后面不能有相应的后缀如:(from a.b.c import f.h)#错误
包内文件永远不会有执行需求,只能导入
(3)这样子使用的包我们该名字起来很麻烦,所以我们一一种更简单的方法,也更方便
相对导入.. 一个点表示当前目录,两个点代表当前目录和上一级目录
from..m1 import f
路径找不到时:import sys
sys.path.append(r'把文件路径复制过来')
import
2,常用模块
import time
三种形式
(1)时间戳
print(time.time())
strt_time=time.time()
time.sleep(3)#睡3秒
stop_time=time.time()
print(stop_time-start_time)
#2格式化的字符串
print(time.strftime('%Y-%m_%d %H:%H:%S %p'))
print(time.strftime('%Y-%m-%d %X %p'))
#3stuct_time对象
print(time.localtime())# (上海,东八区)
print(time.localtime().tm_year)
print(time.localtime().tm_mday)
print(time.gmtime())#UTC时区
datetime 模块 时间
# print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
#print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2016-08-19
# print(datetime.datetime.now() )
# print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
# print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
# c_time = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #时间替换
(datatime.date.fromimestamp(1111))转为年月日
random 模块,随机验证码 常用的几个
print(random.random())#(0,1)----float 大于0且小于1之间的小数
print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之间的整数
print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数
print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716
item=[1,3,5,7,9]
random.shuffle(item) #打乱item的顺序,相当于"洗牌"
print(item)
验证码功能
import random
def make_code(n):
res=''
for i in range(n):
s1=str(random.randint(0,9))
s2=chr(random.randint(65,90))
res+=random.choice([s1,s2])
return res
print(make_code(10))
想要大写小写可以查ASCII表
进度条功能
import sys
import time
total_size=10212
recv_size=0
def progress(percent,width=50):
if percent > 1: #如果百分比大于1的话则取1
percent=1
show_str=('[%%-%ds]' %width) %(int(percent*width)*'#')
#一共50个#,%d 无符号整型数,-代表左对齐,不换行输出,两个% % 代表一个单纯的%,对应的是后面的s,后面为控制#号的个数
# print(show_str) #[############### ] show_str ,每次都输出一次
print(' %s %s%%' %(show_str,int(percent*100)),end='',file=sys.stdout,flush=True)
# 代表调到行首的意思, 为换行的意思,fiel代表输出到哪,flush=True代表无延迟,立马刷新。第二个%s是百分比
while recv_size < total_size: #当接收的大小小于总大小时
time.sleep(0.2) #1024
recv_size+=1024 #每次接收1024
percent=recv_size/total_size #计算百分比 0.10027418723070897
progress(percent,width=30) #调用进度条函数,将百分比传
sys模块
sys.path
sys.argv
shutil模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中
import shutil
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))
shutil.copyfile(src, dst)
拷贝文件
shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
import zipfile
# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall(path='.')
z.close()