- 什么是模块
- 模块的分类
- 第三方模块
- 安装方式
- 内置模块
- sys
- os
- time&datetime
- random
- json& pickle
- 练习
一个.py 文件就是一个模块。
随着代码量的增多,需要将相关的代码放入一个单独的.py文件中,便于管理、维护;代码重用;避免函数重名。
将多个模块及__init__.py放入一个文件夹,则这个文件夹就是一个包。
模块的分类python标准模块(内置)
第三方模块(pip安装)
用户自定义的模块
#导入模块 import random import numpy as np #导入模块中的一个函数 from random import randint,random #导入模块中的所有变量、函数、类 ; 不建议这么做 from random import * #导入包中的函数 from urllib.request import urlopen
模块导入的查找顺序
- 当前目录
- PYTHONPATH(linux系统中配置)
- sys.path 中的路径
第三方模块网址
国内源镜像
- 离线安装,需先下载tar.gz,解压
cd 文件夹 python setup.py install #源码还需build编译
或者下载whl文件
sudo pip3 install xxx.whl
- 在线安装
#win python -m pip install numpy #linux sudo pip3 install numpy
以上默认是从pypi.org 下载安装,速度比较慢。
可以使用国内的源,如下:
sudo pip3 install numpy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com #-i 指定源 #--trusted-host 信任的主机,通过https的安全验证内置模块 sys
sys.argv #收集命令行的参数,放入列表 sys.exit(0) #程序正常退出 sys.platform # os平台 sys.getdefaultencoding() #获取解释器的默认编码 sys.getfilesystemencoding() #文件的默认编码os
import os
dir(os) #查看所有的方法、模块
os.getcwd() #获取当前的工作目录
os.listdir("./")
os.mkdir("a") #创建目录
os.makedirs("a/b/c")
os.remove('a.txt')
os.removedirs("/a/b/c")
os.path.isfile("a.txt") # True
os.path.isdir("a.txt") # False
os.path.isabs("/home/ta") # True
os.path.abspath("a.txt") # 获取文件的绝对路径
os.path.exists("a.txt") #文件、目录是否存在
os.path.split("/a/b/test.txt") # ("/a/b", "test.txt")
os.path.splitext("/a/b/c.txt") #("/a/b/c", '.txt')
os.path.dirname("/a/b/c.txt")
os.path.basename("/a/b/c.txt")
#执行shell命令
os.system("ls -l")
os.popen("ls -l").read()
os.getenv("HOME") #获取环境变量
os.environ #所有的环境变量
os.environ.setdefault("HOME", "xxxx") #设置系统的环境变量
os.linesep #行分隔符 win --> rn linux->n
os.name #操作系统的名字 win-->nt linux -->posix
os.rename("a.txt","b.txt")
os.stat("a.txt") #统计文件的属性
os.chmod("a.txt",400) #修改权限
os.chdir("/a/b/c") #切换目录
os.path.getsize("a.txt") #获取文件的大小 bytes
sys.getsizeof(obj)# 对象占用多少字节
os.path.join("/a/b","c.txt")
os.get_terminal_size()
os.kill(pid,signal.SIGKILL)
time&datetime
时间模块,表示时间、时间差值等
import time
time.localtime() #本地时间 元组(年、月、日、时、分、秒、一周的第几天、一年的第几天、是否夏令时)
time.time() # 1970-1-1 000000到现在的时间 s
time.clock() #从第一次计时,到第二次之间秒数
time.ctime() #本地时间 字符串;或者将时间戳转为时间字符串
time.gmtime() #格林尼治时间 元组,比北京时间慢8小时
time.mktime() #将时间元组,转为时间戳
time.sleep(4) #程序休眠
time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
time.strptime("2021-11-30 22:24:00","%Y-%m-%d %H:%M:%S") #格式一定对应
datetime模块
from datetime import datetime,date,time
datetime.today()
datetime.now()
datetime(2021,11,30,22,31,00)
datetime.fromtimestamp(time.time())
datetime.strftime(datetime.now(),"%Y-%m-%d %H:%M:%S")
datetime.strptime("2021-11-30","%Y-%m-%d")
from datetime import timedelta
datetime.now() + timedelta(days=1,hours=3,minutes=5,seconds=100)
t.replace(year=1999) #时间的替换
#时区
import pytz #python time zone
pytz.all_timezones
pytz.timezone("Asia/Shanghai")
datetime.now(tz=pytz.timezone("Asia/Shanghai"))
random
json& pickle
pass
练习1.自定义一个模块,在模块内定义一个函数test。在函数体内打印_ _file_ _,在模块内使用如下方式执行该函数:
# yourname.py
print("这是我的自定义模块")
def test():
print("test 函数执行")
print("文件名:",__file__)
if __name__ == "__main__":
test()
a. 执行你的模块,查看结果。
b. 配置你的模块到处都可以导入,打开一个python shell导入你的模块,与a步骤中对比,你能发现什么问题?思考一下
c. 调用模块里的test函数,跟a中对比,有什么发现?
2.编写一个函数,接收一个参数(通过命令行传参),如果传入的是py文件,则执行该文件; 若是文件夹,则执行该目录下所有的py文件。
import os
import sys
def test(param):
if os.path.isfile(param) and param.endswith(".py"):
os.system("python %s"%os.path.abspath(param))
elif os.path.isdir(param):
dir_ = os.path.abspath(param)
file_list = os.listdir(dir_)
for i in file_list:
i = os.path.join(dir_, i)
if os.path.isfile(i) and i.endswith(".py"):
os.system("python %s"%os.path.abspath(i))
else:
print("unexpected")
if __name__ == "__main__":
test(sys.argv[1])



