Python基础
Python基础(六)
大家可以关注知乎或微信公众号的‘share16’,我们也会同步更新此文章。
十四、模块
14.1 模块的定义
模块是一个包含所有你定义的函数和变量的文件,其后缀名是 .py;模块可以被别的程序引入,以使用该模块中的函数等功能,这也是使用 Python 标准库的方法。
命名空间因为对象的不同,也有所区别,可以分为如下几种:
- 内置命名空间(Built-in Namespaces): Python 运行起来,它们就存在了;内置函数的命名空间都属于内置命名空间,所以我们可以在任何程序中直接运行它们,比如 id() ,不需要做什么操作,拿过来就直接使用了;
- 全局命名空间(Module:Global Namespaces): 每个模块创建它自己所拥有的全局命名空间,不同模块的全局命名空 间彼此独立,不同模块中相同名称的命名空间,也会因为模块的不同而不相互干扰;
- 本地命名空间(Function & Class:Local Namespaces): 模块中有函数或者类,每个函数或者类所定义的命名空间就 是本地命名空间。如果函数返回了结果或者抛出异常,则本地命名空间也结束了;
程序在查询上述三种命名空间的时候,就按从里到外的顺序,即:Local Namespaces ➔ Global Namesspaces ➔ Built-in Namesspaces。
14.2 导入模块
import 模块名1[, 模块名2[, ... 模块名n]]
import 模块名 as 新名字
from 模块名 import 函数名1[, 函数名2[, ... 函数名n]]
查看模块内所有方法:
''' dir()函数:
不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表; 如果参数包含方法__dir__(),该方法将被调用;如果参数不包含__dir__(),该方法将最大限度地收集参数信息;
'''
dir(datetime)
help(datetime)
datetime.__all__
14.3 __name__属性
对于很多编程语言来说,程序都必须要有一个入口,而 Python 则不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。
__name__
:是内置变量,可用于表示当前模块的名字。
- 当 .py 文件
直接运行
时,if __name__ == '__main__'
之下的代码块将被运行
; - 当 .py 文件
以模块形式被导入
时,if __name__ == '__main__'
之下的代码块不被运行
;
14.4 搜索路径
我们使用 import 语句的时候,Python 解释器是怎样找到对应的文件的呢?
- 搜索路径是由一系列目录名组成的;
- 搜索路径是在 Python 编译或安装的时候确定的,安装新的库应该也会修改;
- 搜索路径被存储在 sys 模块中的 path 变量中;
import sys
print(sys.path)
# 返回一个列表,其中一项是空串'',代表当前目录
14.5 包(package)
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
创建包分为三个步骤:
- 创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字;
- 在文件夹中创建一个 __init__.py 的模块文件,内容可以为空;
- 将相关的模块放入文件夹中。
十五、datetime模块
datetime 是 Python 中处理日期的标准模块,常用的 4 种对日期和时间进行处理的类:datetime、date、time 和 timedelta。
15.1 datetime类
datetime模块:包含一个datetime类;
- 通过 from datetime import datetime 导入的,才是 datetime 这个类;
- 若仅导入 import datetime ,则必须引用全名 datetime.datetime ;
from datetime import datetime
''' 获取 指定的 日期时间 '''
print(datetime(2022, 4, 13, 10, 54, 46, 689472))
# >> 2022-04-13 10:54:46.689472
''' 获取 当前的 日期时间 '''
print(datetime.now(), type(datetime.now()), sep=', ')
datetime.now()
# >> 2022-04-13 10:54:46.689187, <class 'datetime.datetime'>
# >> datetime.datetime(2022, 4, 13, 10, 54, 46, 689472)
''' 将 日期时间 转换成 时间戳 '''
datetime.now().timestamp()
datetime(2022, 4, 13, 10, 54, 46, 689472).timestamp()
# >> 1649859435.124962
# >> 1649818486.689472
''' 将 时间戳 转换成 日期时间 '''
print(datetime.fromtimestamp(1649818486.689472))
datetime.fromtimestamp(1649818486.689472)
# >> 2022-04-13 10:54:46.689472
# >> datetime.datetime(2022, 4, 13, 10, 54, 46, 689472)
''' 返回 最大的 日期时间'''
datetime.max
# >> datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
''' 返回 最小的 日期时间'''
datetime.min
# >> datetime.datetime(1, 1, 1, 0, 0)
''' 根据date和time,创建一个datetime对象 '''
import datetime
print(datetime.datetime.combine(datetime.date(2000,1,1), datetime.time(9,9,9)))
# >> 2000-01-01 09:09:09
15.2 date类
datetime模块:包含一个date类;
- 通过 from datetime import date 导入的,才是 date 这个类;
- 若仅导入 import datetime ,则必须引用全名 datetime.date ;
from datetime import date
''' 获取当前日期 '''
t = date.today()
print(t, type(t))
# >> 2022-04-14 <class 'datetime.date'>
''' 返回最小单位 '''
t.resolution
# >> datetime.timedelta(days=1)
''' 判断2个日期是否相等 '''
t.__eq__(date(2022,4,10))
# >> False
15.3 time类
datetime模块:包含一个time类;
- 通过 from datetime import time 导入的,才是 time 这个类;
- 若仅导入 import datetime ,则必须引用全名 datetime.time ;
1秒 = 1000 毫秒(milliseconds)
1毫秒 = 1000 微妙(microseconds)
15.4 timedelta类
timedelta:表示具体时间实例中的一段时间,可以把它想象成两个日期或时间之间的间隔;常被用来从 datetime 对象中添加或移除一段特定的时间。
'''
import datetime
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
'''
import datetime
import calendar
# 今天、本月天数
t0 = datetime.date.today()
days_month0 =calendar.monthrange(t0.year, t0.month)[1]
# 昨天
t1 = t0 + datetime.timedelta(days = -1)
t2 = t0 - datetime.timedelta(days = 1)
# 明天
t3 = t0 + datetime.timedelta(days = 1)
# 月初、月末
t4 = t0 - datetime.timedelta(days = (t0.day-1))
t5 = t0 + datetime.timedelta(days = (days_month0 - t0.day))
print('今天的日期是:{};\n\
昨天的日期是:{};\n\
明天的日期是:{};\n\
月初的日期是:{};\n\
月末的日期是:{};\n'.format(t0, t1, t3, t4, t5), sep=', ')
''' 运行结果:
今天的日期是:2022-04-14;
昨天的日期是:2022-04-13;
明天的日期是:2022-04-15;
月初的日期是:2022-04-01;
月末的日期是:2022-04-30;
'''
十六、文件与文件系统
文件系统: 相关链接
16.1 打开文件
查看电脑中文件的编码方式
import chardet
f = open('文件路径', 'rb') # 以二进制模式读取文件
data =f.read() # 获取文件内容
print(chardet.detect(data)) # 检测文件内容
# >> {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
打开文件
:open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
'''
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
'''
f = open('Desktop/xxxx.txt', encoding='GB2312', errors='ignore')
for i in f:
print(i)
f.close()
16.2 文件对象方法
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
16.3 OS模块常用函数
OS模块常用函数: 相关链接
谢谢大家🌹