1. 包
包是为了解决模块重名问题,python引入了以目录方式组织模块,称之为包(package),一个包中可以包含模块、包。python的包中必须包含一个特殊文件,被命名为__ init__.py,这文件告诉解释器这是一个包,而目录则不要求一定要有,这是目录和包的区别
2.模块
在python中,模块是代码组织的一种方式,把功能相近的函数放到一个文件中,一个文件(.py)就是一个模块(module),模块名就是文件名去掉后缀py。这样做的好处是:
- 提高代码的可复用、可维护性。一个模块编写完毕后,可以很方便的在其他项目中导入
- 解决了命名冲突,不同模块中相同的命名不会冲突
常用标准库:
标准库 | 说明 |
---|---|
builtins | 内建函数默认加载 |
math | 数学库 |
random | 生成随机数 |
time | 时间 |
datetime | 日期和时间 |
calendar | 日历 |
hashlib | 加密算法 |
copy | 拷贝 |
functools | 常用的工具 |
os | 操作系统接口 |
re | 字符串正则匹配 |
sys | Python自身的运行环境 |
multiprocessing | 多进程 |
threading | 多线程 |
json | 编码和解码 JSON 对象 |
logging | 记录日志,调试 |
2.1 模块搜索路径
当导入一个模块时,解释器先在当前包中查找模块,若找不到,然后在内置的built-in模块中查找,找不到则按sys.path给定的路径找对应的模块文件(模块名.py)
import sys
#sys.path是一个列表
print(sys.path)
#可以使用列表的方法,增加搜索路径
sys.path.append(r'c:\wh1803')
2.2 导入模块
可以使用import语句导入模块,格式:
#1基本语法
import 包名.模块名1
import 包名.模块名2
....
import 包名.模块名n
#或者一行导入多个,不建议这么些,可读性不好
import 模块1,模块2,....模块n
#2 使用from...import导入指定标识符,语法:
from module import name1 [,name2 [,name3...[,namen]]]
from module imort * #导入模块中所有标识符,不建议使用
#3.可是使用as给模块起一个别名
import 模块名 as 别名
import语句的模块顺序,推荐在文件开头导入模块,建议按照如下顺序:
- python标准库
- 第三方库
- 自定义库
这三类库中间添加一个空行,模块第一次被导入的时候会被执行。如果在导入模块不想执行模块中代码,可以使用__ name__
属性进行判断,如果该模块是当前模块,不是导入模块,__name __
的值是__main__
。所以可以这样检测:
#hello.py
def test()
print('test')
if __name__ == '__main__' #执行的是当前模块,则为真;导入的模块则为假
test()
3 日期时间模块
datetime:日期
time :时间
calendar:日历
时间间隔是以秒为单位的
每个时间戳都以自从1970.1.1经历了多长时间计算的
时间戳:当前时间距离1970.1.1的秒数
3.1 time时间模块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BlvomI21-1605985880333)(C:\Users\小瘦子\AppData\Roaming\Typora\typora-user-images\1552266102285.png)]
UTC:格林威治天文时间,世界标准时间,在中国UTC+8
DST:夏令时
时间的表示形式:
a.以整数或者浮点数表示一个以秒为单位的时间间隔,这个时间的基础值1970.1.1的零时零分零秒
b.采用Python中的数据结构表示,采用元组,元组中可以有9个不同的元素,表示不同的含义
c.格式化的时间字符串
import time #1.获取当前时间的时间戳 c = time.time() #********* print(c) #时间的第一种表示形式,时间戳:1522635821.4109497 #2.将上述时间戳转换为时间元组 g = time.gmtime(c) print(g) #time.struct_time(tm_year=2018, tm_mon=4, tm_mday=2, tm_hour=2, tm_min=25, tm_sec=33, tm_wday=0, tm_yday=92, tm_isdst=0) #3.将时间戳生成时间元组(本地时间) l = time.localtime(c) #********* print(l) #time.struct_time(tm_year=2018, tm_mon=4, tm_mday=2, tm_hour=10, tm_min=27, tm_sec=13, tm_wday=0, tm_yday=92, tm_isdst=0) #4.将时间元组转换为时间戳 c2 = time.mktime(l) print(c2) c3 = time.mktime((2018,4,2,10,29,23,3,320,0)) print(c3) #5.将时间戳转换为字符串 c4 = time.ctime(c3) print(c4) #Mon Apr 2 10:29:23 2018 #6.将时间元组转换为格式化字符串 #注意:必须严格按照格式化的形式书写字符串【严格区分大小写】 s = time.strftime("%Y-%m-%d %H:%M:%S",l) #********* print(s) #2018-04-02 10:35:45 #7.将指定格式的时间字符串转换为时间元组 #参数1:指定的时间 参数2:指定的时间格式 p = time.strptime("2018-04-02 10:35:45","%Y-%m-%d %H:%M:%S") print(p) #time.struct_time(tm_year=2018, tm_mon=4, tm_mday=2, tm_hour=10, tm_min=35, tm_sec=45, tm_wday=0, tm_yday=92, tm_isdst=-1) #8.休眠【暂停】 #使用情景:多线程中 print("~~~~~~~~") #参数的单位为秒 #time.sleep(5) #********* print("~~~~~~~~") #9.用来衡量不同程序的耗时 print(time.clock()) #********* #time\localtime\strftime\sleep\clock #练习:假如我有一个时间字符串,然后向得到这个字符串所对应时间3天之后的时间 #2017.5.7 time1 = "2017-5-7" #将时间转换为元组 p1 = time.strptime(time1,"%Y-%m-%d") print(p1) #将元组转换成时间戳 t1 = time.mktime(p1) t3 = t1 + 3 * 24 * 3600 #最终转换为格式化形式 f = time.strftime("%Y.%m.%d",time.localtime(t3)) print(f) #2017-05-10
3.2 datetime日期模块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VkRdhrTx-1605985880342)(C:\Users\小瘦子\AppData\Roaming\Typora\typora-user-images\1552266078665.png)]
datetime比time更加高级。是对time进行了封装
import datetime #1.获取当前时间 d1 = datetime.datetime.now() print(d1) #2018-04-02 10:58:32.061897 #2.获取指定时间 d2 = datetime.datetime(2018,4,2,10,56,32,3623) print(d2) #2018-04-02 10:56:32.003623 #3.将指定时间转换为字符串 d4 = d1.strftime("%Y-%m-%d") print(d4) #2018-04-02 print(type(d4)) d5 = datetime.datetime.strptime(d4,"%Y-%m-%d") print(d5) #2018-04-02 00:00:00 #4两个时间相减,可以得到时间间隔 d6 = datetime.datetime(2018,4,2,10,56,00,3623) d7 = datetime.datetime(2018,4,5,10,56,32,3623) d8 = d7 - d6 print(d8) #3 days, 0:00:00 print(d8.days) #3 #整数天之外的秒数 print(d8.seconds)
3.3 calendar日历模块
主要用于获取日历的相信信息
import calendar #1.直接返回指定年和月的万年历表示形式 print(calendar.month(2018,4)) #******** #2.返回万年历的二维列表表示形式 print(calendar.monthcalendar(2018,4)) #3.直接返回指定年份的万年历表示形式 print(calendar.calendar(2018)) #******** #4.判断某年是否为闰年 print(calendar.isleap(2010)) #******** print(calendar.leapdays(2000,2020)) #******** #5.返回指定月的weekday的第一天和这个月的所有的天数 print(calendar.monthrange(2018,4)) #(6, 30)---》(当月开始的第一天为星期几,mon为0,第二个元素表示当月的总天数) print(calendar.monthcalendar(2018,4)) #当前日期表示的星期数 print(calendar.weekday(2018,4,2)) #********
4 第三方模块
物理环境安装步骤:
1.在终端中输入命令:pip -V 【检查版本,这个步骤在安装Python环境的时候如果勾选了Add path选项,则已自动安装】
2.安装第三方模块:pip install pillow 【pillow为一个图形处理的第三方模块,需要联网下载】
如果此步出错,则执行命令 python -m pip install --upgrade
3,.如果不使用第三方模块,则可以执行命令:pip uninstall pillow ,卸载第三方模块
pycharm虚拟环境安装
在pycharm底部打开"Terminal"窗口,在这个窗口里执行pip将在虚拟环境中安装第三方库
格式化时间字符串
元组格式