一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
一、Python 中的包及包的导入
包既文件夹,包中可以包含子包既子文件夹,一个个 Python 脚本就是模块,模块中有包含了类和函数。 Python 的包中必须包含一个 __init__.py 文件,文件内容任意,不包含 __init__.py 文件,这个包就无法被他人使用
新建三个 Python Package,分别是 alpha、bravo、charlie,使用 PyCharm 新建 Python Package 会自动包含 __init__.py 文件
在 alpha 包下新建 alpha 模块并增加函数
代码语言:javascript复制def walk():
return 'alpha包下的alpha模块中的walk函数被调用'
def run():
return 'alpha包下的alpha模块中的run函数被调用'
在 bravo 包下新建 bravo 模块并增加函数
代码语言:javascript复制def rush():
return 'bravo包下的bravo模块中的rush函数被调用'
def run():
return 'bravo包下的bravo模块中的run函数被调用'
在 charlie 包下新建 charlie 模块并增加类别全局变量
代码语言:javascript复制heros = ['stark', 'banner', 'thor']
heros_org_name = 'Avengers'
class Hero:
def __init__(self, name):
self.name = name
def __str__(self):
return 'charlie包下的charlie模块中的Hero对象被实例化了'
包和模块的导入
导入既将 Python 中的某个包或者模块导入当前的脚本中,导入使用 from 和 import 关键字,模块被导入后,就可以在当前文件中使用导入模块的函数类或者变量等。
在命令行中导入模块
新建一个 test.py,与 lilith 包在同一级目录
代码语言:javascript复制def hello():
print('hello')
在该目录下开启命令进入 Python3 的运行界面,使用 import 关键字导入
在lilith包新建一个lilith.py脚本文件,在该文件中新增lilith函数
代码语言:javascript复制def lilith():
print('lilith包下的lilith模块中的lilith函数被调用')
在 test.py 文件中想要引用 lilith 函数,就必须使用 from import 关键字导入lilith模块,通过lilith模块调用lilith函数
代码语言:javascript复制from lilith import lilith
lilith.lilith()
多级导入
lilith模块中还包含了alpha包、bravo包以及charlie包,想要在test.py文件中导入alpha、bravo、charlie包就需要现在lilith模块中导入这三个包,可以将导入语句写在lilith包下的__init__.py文件中
代码语言:javascript复制from .alpha import alpha
from .bravo import bravo
from .charlie import charlie
再在test.py文件中导入alpha包
代码语言:javascript复制from lilith import alpha
print(alpha.walk())
alpha模块中和bravo模块中都存在run函数,此时可以使用as关键字进行重命名
代码语言:javascript复制from lilith.alpha.alpha import run as alpha_run
from lilith.bravo.bravo import run as bravo_run
print(alpha_run())
print(bravo_run())
导入语句非常的长,先要导入charlie模块下的类和变量可以将lilith包下的__init__.py文件中的导入语句改为
代码语言:javascript复制from .charlie.charlie import Hero, heros, heros_org_name
直接将需要用到的变量、类导入到当前lilith包中,这样在test.py文件中可以直接从lilith模块中导入这些变量
代码语言:javascript复制from lilith import Hero, heros_org_name, heros
hero = Hero('stark')
print(hero)
print(heros_org_name)
for i in heros:
print(i)
二、Python 中常用的第三方包/库
Python 中有非常多的功能完善的第三方库,通过这些第三方库可以极大的提高开发效率,有些第三方库是Python自带的,有些不是Python自带的,需要通过pip安装工具进行安装使用,推荐使用国内的镜像源,安装速度更快,使用Python官方的源非常容易超时,导致安装失败
代码语言:javascript复制pip3 install 第三方库的名称 -i https://pypi.tuna.tsinghua.edu.cn/simple
datetime 模块
datetime是比较常用的一个库,可以用来获取当前时间,时间间隔等;并且支持时间对象和字符串之间的互相转换。
datetime库需要导入使用
代码语言:javascript复制import datetime
# 获取当前时间
now_time = datetime.datetime.now()
print(now_time)
# 实例化一个时间对象
datetime_obj = datetime.datetime(2022, 4, 14, 17, 00, 0000)
print(datetime_obj)
print(type(datetime_obj))
代码语言:javascript复制from datetime import datetime
from datetime import timedelta
diff_time = timedelta(weeks=0, days=1, hours=0, minutes=0, seconds=0, microseconds=0)
last_day = datetime.now() - diff_time
print(last_day)
print(type(last_day))
时间对象转成字符串
使用datetime对象的strftime函数可以将datetime对象转换成str对象
代码语言:javascript复制from datetime import datetime
datetime_obj = datetime.now()
print(datetime_obj)
print(type(datetime_obj))
datetime_str = datetime_obj.strftime('%Y-%m-%d %H:%M:%S')
print(datetime_str)
print(type(datetime_str))
datetime_str_02 = datetime_obj.strftime('%Y/%m/%d %H:%M:%S')
print(datetime_str_02)
print(type(datetime_str_02))
时间字符串转成时间对象
将字符串类型的时间转换成datetime类型的时间需要使用到strptime()函数,接收两个参数,分别是符合时间格式的字符串和室间隔字符串匹配规则
代码语言:javascript复制# 转换为datetime对象
print('------字符串类型的时间转换为datetime类型的时间')
new_datetime_obj = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
print(new_datetime_obj)
print(type(new_datetime_obj))
new_datetime_obj_02 = datetime.strptime(datetime_str_02, '%Y/%m/%d %H:%M:%S')
print(new_datetime_obj_02)
print(type(new_datetime_obj_02))
字符 | 含义 |
---|---|
%Y | 表示四位数年份,如2022 |
%m | 表示两位数月份,如01-12 |
%d | 表示两位数的月份中的天,如01-31 |
%H | 表示一天中的24小时,00-23 |
%I | 表示一天中的第几个小时, 01-12 |
%M | 表示当前是第几分钟, 00-59 |
%I | 表示当前第多少秒, 0-61 闰年多占2秒 |
%I | 表示当前第多少毫秒 |
英文星期月份格式化字符
字符 | 含义 |
---|---|
%a | 星期简称,Mon, Mar, Apr |
%A | 星期全称,Monday, Friday |
%b | 月份简称,Jan, Feb, Apr |
%B | 月份全称,March, April |
%c | 本地时间 |
%p | 上午下午,AM,PM |
%j | 一年中的第几天 |
%U | 一年中的星期数 |
time 模块
time 模块可以对时间进行处理包含了许多函数。
time() 函数
时间戳既timestamp,是一个float类型的时间数据,是指从1970年1月1日00时00分00秒,至今的总毫秒数,time() 函数可以返回一个时间戳
代码语言:javascript复制import time
timestamp_01 = time.time()
print(timestamp_01)
print(type(timestamp_01))
localtime() 函数
localtime()函数可以获取本地的时间
代码语言:javascript复制import time
localtime_01 = time.localtime()
print(localtime_01)
print(type(localtime_01))
也可以传入一个时间戳,将时间戳转换为localtime,比如传入1630004519.7968051
此时打印出的year即为2021
localtime输出结果中的字段。
属性名 | 属性描述 | 取值范围 |
---|---|---|
tm_year | 四位数年份 | 2022 |
tm_mon | 月份 | 1-12 |
tm_mday | 天数 | 1-31 |
tm_hour | 小时 | 0-23 |
tm_min | 分钟 | 0-59 |
tm_sec | 秒 | 0-59 |
tm_wday | 一周的第几天 | 0-6 |
tm_yday | 一年的第几天 | 1-366 |
tm_isdst | 夏令时 | 0,1 |
os 模块
os模块包含的函数与函数功能描述
函数名 | 参数 | 功能描述 | 使用 | 返回值 |
---|---|---|---|---|
getcwd() | 无参数 | 返回当前脚本所在路径 | os.getcwd() | 字符串类型 |
listdir() | 字符串类型的路径 | 返回指定路径的下所有文件 | os.listdir('c://') | 列表类型 |
makedirs() | 字符串类型的路径 | 创建一级或多级目录 | os.makedirs('a/b/c') | 字符串类型 |
import os
# 获取当前脚本所在路径
current_path = os.getcwd()
print(current_path)
print(type(current_path))
# 获取路径下的文件列表
file_list = os.listdir(current_path)
print(file_list)
print(type(file_list))
# 创建一级或多级目录
os.makedirs('alpha')
os.makedirs('bravo/charlie')
print(os.listdir(current_path))
print(os.listdir('{}/bravo'.format(current_path)))
makedirs()创建文件夹时,如果文件夹已存在则会报错
os.path 模块
os.path模块中一些常用函数如下:
函数 | 参数 | 函数描述 | 使用 | 返回值 |
---|---|---|---|---|
exists | 字符串类型的路径 | 文件或路径是否存在 | os.path.exists('test.py') | bool类型 |
isdir | 字符串类型的路径 | 是否是文件夹 | os.path.isdir('c://') | bool类型 |
isabs | 字符串类型的路径 | 是否是绝对路径 | os.path.isabs('test.py') | bool类型 |
isfile | 字符串类型的路径 | 是否是文件 | os.path.isfile('test.py') | bool类型 |
join | 字符串类型的路径 | 路径字符串合并 | os.path.join('d://', 'test') | 字符串路径 |
split | 字符串类型的路径 | 以最后一层路径为基准切割 | os.path.split('c://test') | 列表 |
import os.path
current_path = os.getcwd()
print(current_path)
print(os.path.exists(current_path))
print(os.path.isdir(current_path))
print(os.path.isabs(current_path))
print(os.path.isfile('{}/test.py'.format(current_path)))
代码语言:javascript复制join_path = os.path.join(current_path, 'bravo', 'charlie')
print(join_path)
split_path = os.path.split(os.path.join(current_path, 'test.py'))
print(split_path)
print(type(split_path))
sys 模块
sys 模块中的常用方法如下:
函数 | 参数 | 函数描述 | 使用 | 返回值 |
---|---|---|---|---|
modules() | 无 | Python启动时加载的模块 | sys.modules() | 字典类型 |
path() | 无 | 返回当前Python环境路径 | sys.path() | 列表类型 |
exit() | 无 | 退出程序 | sys.exit() | 无返回值 |
getdefaultencoding() | 无 | 获取系统编码 | sys.getdefaultencoding() | 字符串 |
platform() | 无 | 获取当前系统 | sys.platform() | 字符串 |
version | 无 | 获取Python版本 | sys.version | 字符串 |
argv | *args | 获取外部参数 | sys.argv | 列表 |
import sys
mds = sys.modules
print(mds)
print(type(mds))
py_path = sys.path
print(py_path)
print(type(py_path))
encode = sys.getdefaultencoding()
print(encode)
print(sys.platform)
print(sys.version)
print('开始执行退出程序')
sys.exit(1)
print(py_path)
执行退出程序后,退出代码下面的代码不再执行
代码语言:javascript复制import sys
name = sys.argv[1]
if name == 'stark':
print('I am IRONMAN')
elif name == 'thor':
print('God of Thunder')
elif name == 'hulk':
print('Strongest Avenger')
else:
print('Pls input a hero')
argv支持外部输入参数