包的结构
-
包文件夹
- __init__.py文件
- 模块1
- 模块2
- 子包:
- __init__.py
- 模块1
- 模块2
-
有时候自己写的包文件是以数字开头,而python不能以数字开头
- 解决办法:借助第三方包 importlib包,中的import_module()方法来实现
import importlib
a = importlib.import_module("01")
模块的搜索路径和存储
- 路径的查询
import sys
for i in sys.path:
print(i)
#路径的添加
#sys.path.append()向路径列表中添加新路径
包的导入
- 以下都是导入包中的__init__.py中的内容,其他模块需单独导入
- import package
- import package as X
- from package import*
- 若想上面方法导入其它模块,init.py文件中需使用__all__
- __all__修饰后,只会载入__all__中内容,不会载入其他__init__中内容
- __all__ = ["module1", "module2", "module3", "package1",...]
常用包
calendar--日历相关模块
- calendar.calendar(year,w=0, l=0, c=0)返回指定年份的日历
- calendar.prcal()同上
- w-日期间的间隔字符数量
- l-每周所占的行数
- c-每个月之间间隔的字符数
import calendar
print(calendar.calendar(2020, w=0, l=0, c=0))
- calendar.isleap(year)判断某年是不是闰年
print(calendar.isleap(2020))
- calendar.leapdays(year,year)指定年份到指定年份间,有几个闰年
print(calendar.leapdays(1900,2020))
- calendar.month(year, month)返回指定月份的日历
- calendar.prmonth() 同上
print(calendar.month(2020, 1))
- calendar.monthrange(year, month)返回指定月是周几开始的和有几天的元组,周一从0开始
w, l = calendar.monthrange(2020, 6)
print(w)
print(l)
- calendar.monthcalendar(year, month)返回指定月份的列表矩阵(列表的嵌套)
print(calendar.monthcalendar(2020, 1))
- calendar.weekday(year, month, day) 返回指定日期是周几
print(calendar.weekday(2020, 1, 1))
time--时间相关模块
-
时间戳:一个时间表示,根据编程语言不同,可能是整数,可能是小数从1970年1月1日0时0分0秒,到现在所经历的秒数32位系统支持到2038年,64位系统支持到
-
UTC时间:格林威治时间
-
夏令时:国外会有规定的时间对标
-
时间元组:python中一个包含时间元素的普通元组
-
时间元组的元素
- 0: 4位数年 2008
- 1: 月 1 到 12
- 2: 日 1到31
- 3: 小时 0到23
- 4: 分钟 0到59
- 5: 秒 0到61 (60或61 是闰秒)
- 6: 一周的第几日 0到6 (0是周一)
- 7: 一年的第几日 1到366 (儒略历)
- 8: 夏令时 -1, 0, 1, -1是决定是否为夏令时的旗帜
-
timezone当前时区和UTC时间相差的秒数(无夏令时)
import time
print(time.timezone)
- altzone当前时区和UTC时间相差的秒数(有夏令时)
print(time.altzone)
- daylight判断当前是否是夏令时,0表示是
print(time.daylight)
- time.time()得到一个时间戳
print(time.time())
- time.localtime()返回一个当前的时间元组
print(time.localtime())
print(time.localtime()[0])
t = time.localtime()
print(t.tm_year)
- asctime() 把时间元组字符串化
print(time.asctime(time.localtime()))
- ctime()把时间元组字符串化,可以直接用
print(time.ctime())
- time.mktime()通过时间元组获取时间戳(截取了浮点数的整数部分)
print(time.mktime(time.localtime()))
- time.clock()获取CPU时间(但是3.3版本后就不好用了,建议不要用了)
pass
- time.sleep()使程序进入休眠,N秒后继续
for i in range(10):
print(i)
time.sleep(0.01)
-
time.strftime()将时间元组转化为自定义的字符串格式
-
python中时间日期格式化符号
符号 描述 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
t = time.localtime()
tt = time.strftime("%Y年%m月%d日 %H:%M:%S", t)
print(tt)
datetime--日期相关模块
-
提供时间和日期的运算表示
-
datetime.date(year, month, day)构造一个日期
import datetime
t = datetime.date(2020, 10, 1)
print(t)
print(t.day)
print(t.month)
print(t.year)
- datetime.time(hour, minute, second)构造一个时间
t = datetime.time(23, 48, 50)
print(t)
print(t.second)
print(t.minute)
print(t.hour)
- datetime包中的datetime模块 提供时间和日期的组合
from datetime import datetime
print(datetime.today()) #获取本地的日期时间
print(datetime.now()) #同上,但是接受一个时区参数,如果没有同上
print(datetime.utcnow()) #格林威治时间
print(datetime.fromtimestamp(time.time())) #从一个时间戳得到时间
- datetime.timedelta() 获取一个时间间隔
from datetime import datetime, timedelta
t1 = datetime.now()
t2 = timedelta(hours = 1)
print(t1 + t2)
timeit时间测量工具包
- timeit(stme="",setup="", number=x)
- 测试两段代码的运行时间
- stmt要运行的代码,以字符串的形式给入,或者是一个函数
- setup需要的一些环境变量
- number循环次数
import timeit
c1 = """
sum = []
for i in range(a):
sum.append(i)
"""
c2 = "[i for i in range(10000)]"
print(timeit.timeit(stmt=c1, setup="a=10000", number=1))
print(timeit.timeit(stmt=c2, setup="pass", number=1))
def doIt():
n = 4
for i in range(n):
print("数字{}".format(i))
print(timeit.timeit(stmt=doIt, setup="pass", number=1))
os操作系统相关包
- os.getcwd()返回字符串,获取当前工作目录的绝对路径
import os
print(os.getcwd())
- os.chdir("新路径")改变当前的工作目录
os.chdir("C:\Users\tkDesktop\1")
print(os.getcwd())
- os.listdir()返回一个列表,获取一个文件夹中的所有子目录和文件目录
print(os.listdir("C:\Users\tkDesktop\1"))
- os.makedirs("文件夹名字")在工作目录创建一个新文件夹
pass
- os.system("系统命令符") 运行系统shell命令
- 返回值为0表hi执行成功,1为失败
- 一般推荐使用"subprocess"模块代替
print(os.system("ls"))
- os.getenv("环境变量名称")返回字符串,获取指定的系统环境变量值
print(os.getenv("PATH"))
- os.putenv("环境变量名称","内容")添加一个环境变量
pass
- os.exit() 退出系统
pass
- os.cirdir 返回当前目录
print(os.curdir)
- os.pardir 返回父目录
print(os.pardir)
- os.sep 返回当前系统的路径分隔符
print(os.sep)
- os.linesep 返回当前系统的行终止符
print(os.linesep)
- os.name 返回当前系统名
print(os.name)
os.path 模块
- os.path.abspath 将给的路径转化为绝对路径
import os.path
print(os.path.abspath(".")) #"."为当前路径
- os.path.basename("路径") 获得路径中的文件名部分
print(os.path.basename("C:\Users\tkDesktop\1"))
- os.path.join("路径1","路径2","路径3", ...) 拼合适合当前系统文件路径
print(os.path.join("{}".format(os.getcwd()), "1"))
- os.path.split("路径") 将路径分割为文件夹部分和文件部分,返回一个元组
print(os.path.split("C:\Users\tkDesktop\1"))
- os.isdir("路径") 判断路径是否是目录
print(os.path.isdir("C:\Users\tkDesktop\1\P00_Test"))
- os.path.exists("路径") 判断“文件”或“目录”是否存在
print(os.path.exists("C:\Users\tkDesktop\1"))
shutil 文件的相关操作模块
-
shutil.copy("文件路径", "目标路径") 复制文件
- 返回值为目标路径
- 赋值的同时可以重命名,在目标路径加新文件名
-
shutil.copy2("文件路径", "目标路径") 复制文件 同时保留文件的属性(创建时间等)
-
shutil.copyfile("文件路径", "目标路径") 复制一个文件的内容到另一个文件中
- 返回目标文件路径
-
shutil.move("文件目录", "目标目录") 移动文件
- 返回目标路径
-
shutil.make_archive("归档后的目录和文件名","后缀","需要归档的文件夹") 文件归档操作
- 返回归档后的路径
- 后缀只支持几种:zip,rar等。
-
shutil.unpack_archive("归档文件路径","解包之后的地址") 文件解档操作
- 返回解包后的路径
zipfile 压缩包
- zipfile.ZipFile("归档文件的路径") 用于实例化一个压缩文件,类似于a=Tk()
zf = zipfile.ZipFile("归档文件的路径")
- 实例.getinfo("文件名") 获得压缩包内指定文件的文件属性,如创建时间等
print(zf.getinfo("文件名"))
- 实例.namelist("归档文件的路径") 获取归档文件内的所有文件列表
print(zf.namelist("归档文件的路径"))
- 实例.extractall("解档的路径") 解档文件
zf.extractall("解档的路径")
random 随机数包
- random.random() 产生一个0-1之间的随机小数
import random
print(random.random())
- random.uniform(a,b) 在a,b数间,可以是整数也可以是浮点数,产生一个随机的浮点数
print(random.uniform(1.5,10.5))
- random.randint(a,b) 在a,b数间,可以是整数也可以是浮点数,产生一个随机的整数
print(random.randint(2,5))
- random.randrange(a,b,c) 在a,b数间以c为间隔,产生一个随机整数
print(random.randrange(1,9,2))
- random.chioce(sequence) 在一个序列中随机选择一个数
l = [1,4,5,7,9,12]
print(random.choice(l))
- random.shuffle(sequence) 将一个列表内的元素打乱,无返回值,打乱元列表
random.shuffle(l)
print(l)
- random.samlpe(sequence,x) 从一个序列中,随机产生一个指定个数列表,不打乱元序列
tu = (2,3,4,8,7)
st = "python is ok"
print(random.sample(l, 2))
print(random.sample(tu, 2))
print(random.sample(st, 2))
- 三角分布的随机数 random.triangular(low, high, mode)
- 高斯分布的随机数(稍快) random.gauss(mu, sigma)
- beta β分布的随机数 random.betavariate(alpha, beta)
- 指数分布的随机数 random.expovariate(lambd)
- 伽马分布的随机数 random.gammavariate(alpha, beta)
- 对数正态分布的随机数 random.lognormvariate(mu, sigma)
- 正态分布的随机数 random.normalvariate(mu, sigma)
- 冯米塞斯分布的随机数 random.vonmisesvariate(mu, kappa)
- 帕累托分布的随机数 random.paretovariate(alpha)
- 韦伯分布的随机数 random.weibullvariate(alpha, beta)
math 处理数学相关运算包
- 定义了两个常数,e自然常数 和 pi圆周率
import math
print(math.e)
print(math.pi)
- math.ceil(x) 浮点数向上取整
- math.floor(x) 浮点数向下取整
- math.pow(x,y) 指数函数,X的Y次方
- math.log(x,base) 指数函数,默认以e为底数,base可以指定底数
- math.sqrt(x) 开平方
- 三角函数,弧度角度互换,双曲函数 等。
collections模块
namedtuple模块
- 给一组tuple数据命名,方便阅读
from collections import namedtuple
Point = namedtuple("Point", ["x", "y", "z"])
p = Point(2, 3, 4)
print(p[0])
print(p.y)
deque模块
- 解决频繁的在list中插入和删除元素的效率问题
from collections import deque
l = [1,2,3,4,5]
a = deque(l)
a.append("b")
print(a)
a.appendleft("v")
print(a)
defaultdict()方法
- 调用指定字典时,如果没有key正常时报错,如果用此模块,就返回指定函数
from collections import defaultdict
d = defaultdict(lambda:"None")
d["a"] = 1
d["b"] = 2
print(d["a"])
print(d["g"])
Counter模块统计一个字符串出现的频率
from collections import Counter
print(Counter("abbcccddddeeeeeffffff"))
print(Counter(["sere", "lro", "mdmd"]))