包的使用和常用模块

包的使用和常用模块
今天我们主要学习了常用模块中的 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()

原文地址:https://www.cnblogs.com/maojiang/p/8749007.html