【笔记】2022.4.27 模块、包、常用模块

文件目录

1. 模块

python中一个py文件就是一个模块


1.1 使用要求

前提:被使用的模块的模块名必须符合变量名的的要求(是标识符不是关键字)

能被使用的内容:所有的全局变量

怎么用:使用别的模块中的内容前,必须先导入模块


1.2 导入模块


1.2.1 import模块名

导入指定模块;导入后可以通过’模块名.xxx’的方式使用这个模块中所有的全局变量

RIGHT Example:

import test
print(test.a)				

1.2.2 from 模块名 import 变量1, 变量2, …

导入指定模块;导入后可以直接使用指定的变量

RIGHT Example:

from test import a
print(a)		

WRONG Example:

from test import a
print(b)				# 报错,NameError: name 'b' is not defined
print(test.b)           # 报错,NameError: name 'b' is not defined

1.2.3 from 模块名 import *

导入指定模块中所有的变量;导入后可以直接使用所有变量

RIGHT Example:

from test import *
print(a)
print(b)

1.2.4 import 模块名 as 新模块名

直接导入指定模块并且对模块进行重命名,重命名后需要通过新模块名来代替原模块名使用模块

RIGHT Example:

import test as ts
print(ts.a)
print(ts.b)

APPLICATION 模块名和变量名冲突:

# 错误示范,会报错
import time
time = '2000-9-1'
print(time.time())

# 正确示范
import time as T
time = '2000-9-1'
print(T.time())

1.2.5 导入时给变量名重命名

from 模块名 import 变量名1 as 新变量名1, 变量名2, 变量名3 as 新变量名3, …

RIGHT Example:

from test import a as ta, b as tb
a = 'hello'
print(ta)
print(tb)

1.3 导入原理

不管以什么样的方式导入模块,导入模块的时候系统会自动进入模块执行这个模块中所有的代码


1.4 阻止导入

因为导入模块的时候默认会执行模块中所有的代码,就会导致有些完全没有必要在导入的时候执行的代码被执行

阻止导入:如果希望导入模块的时候某些代码可以不执行,就需要去阻止代码在被导入的时候执行

阻止方法:将不希望执行的代码放到main对应if条件语句里面

if __name__ == '__main__':

2. 包

包就是存放__init__.py文件的文件夹


2.1 import 包名

直接导入包,导入后可以通过’包.xxx’的方式使用__ init__.py中所有的全局变量

RIGHT Example:

import package1
print(package1.y)

2.2 import 包名.模块名

导入指定包中的指定模块,导入后可以通过’包名.模块名.xxx’来使用指定模块中所有的全局变量

RIGHT Example:

import package1.test2
print(package1.test2.x)
package1.test2.func2()

# 改良:
import package1.test2 as test2
print(test2.x)
test2.func2()

2.3 from 包名 import 模块名1, 模块名2, …

导入包中的指定模块,导入后通过模块名.xxx使用对应的模块中的全局变量

RIGHT Example:

from package1 import test2, test3
print(test2.x)
test2.func2()

print(test3.z)
test3.func4()

2.4 from 包名 import *

导入包中的 __ init __.py文件中所有的全局变量

RIGHT Example:

from package1 import *
print(y)
func3()

2.5 from 包名.模块名 import 变量1, 变量2, …

导入指定模块中的指定变量

RIGHT Example:

from package1.test3 import z, func4
print(z)
func4()

3. 常用模块


3.1 数学模块


3.1.1 浮点数转整数

(1)int(浮点数):直接保留整数部分

RIGHT Example:

print(int(1.23))						# 1
print(int(-1.23))						# -1

(2)math.ceil(浮点数):向大取整

RIGHT Example:

print(math.ceil(1.98))      			# 2
print(math.ceil(1.002))     			# 2
print(math.ceil(-1.23))     			# -1

(3)math.floor(浮点数):向小取整

RIGHT Example:

print(math.floor(1.98))     			# 1
print(math.floor(1.002))        		# 1
print(math.floor(-1.08))        		# -2

(4)round(浮点数):四舍六入五成双

RIGHT Example:

print(round(1.68))              		# 2
print(round(1.402))             		# 1
print(round(1.5))               		# 2
print(round(2.5))               		# 2

3.1.2 绝对值

(1)abs(数字)

RIGHT Example:

print(abs(-23))                 		# 23
print(abs(-23.45))              		# 23.45

(2)math.fabs(数字)

RIGHT Example:

print(math.fabs(-23))           		# 23.0
print(math.fabs(-23.45))           		# 23.45

3.2 random模块


3.2.1 创建随机整数

randint(a, b):产生[a, b]的随机整数

RIGHT Example:

print(random.randint(1, 100))

3.2.2 创建随机小数

random():产生[0, 1)的随机小数

RIGHT Example:

print(random.random())

APPLICATION 1 产生0~100的随机小数:

print(f'{random.random() * 100:.2f}')

APPLICATION 2 产生30~100的随机小数:

print(random.random() * 70 + 30)

APPLICATION 3 产生25~55的随机小数:

print(random.random() * 30 + 25)

3.2.3 在指定的等差数列中随机获取一个数

randrange(N), randrange(M, N), randrange(M, N, step)

RIGHT Example:

print(random.randrange(0, 100, 2))
print(random.randrange(10, 61, 10))

3.2.4 洗牌

shuffle(列表):将列表中元素的顺序随机打乱

RIGHT Example:

nums = [10, 20, 30, 40, 50]
random.shuffle(nums)
print(nums)

3.2.5 抽牌

(1)choice(序列):从指定序列中随机获取一个元素

RIGHT Example:

print(random.choice('abc123'))
print(random.choice(nums))

(2)choices(序列):从指定序列中随机获得一个元素,返回值是列表

RIGHT Example:

print(random.choices('abc123'))

(3)choices(序列, k=个数):从指定序列中随机获得指定个数个元素,返回值是列表(有放回抽取)

RIGHT Example:

print(random.choices('abc123', k=2))

(4)choices(序列, weights=权重列表, k=次数):从指定序列中随机获得指定个数个元素,返回值是列表

RIGHT Example:

list1 = ['谢谢!', '5元红包', '100元红包', 'iphone13', 'macpro', '100万元现金']
print(random.choices(list1, weights=[100000, 1000, 5, 3, 2, 1]))

(5)sample():无放回抽样

random.sample(序列, k=次数) # 3.9以前的版本

random.sample(序列, k=次数, counts=权重列表) # 3.9以后的版本

RIGHT Example:

print(random.sample([10, 20], k=2))
print(random.sample(list1, k=1, counts=[50000, 50000, 100, 10, 1]))

3.3 time模块


3.3.1 time()

获取当前时间,返回的是时间戳

补充:

时间戳:通过保存一个时间到1970年1月1日0时0分0秒(格林威治时间)之间的时间差(单位:秒)来保存一个时间值

使用时间戳保存时间的好处:a.节约内存 b.方便加密

RIGHT Example:

t1 = time.time()
print(t1)               # 1651052151.1938202

3.3.2 localtime()

(1)localtime():获取本地当前时间,返回的是结构体时间

RIGHT Example:

t2 = time.localtime()
print(t2)
# time.struct_time(tm_year=2022, tm_mon=4, tm_mday=27, tm_hour=17, tm_min=56, tm_sec=42, tm_wday=2, tm_yday=117, tm_isdst=0)

(2)localtime(时间戳):将时间戳转换成结构体时间

RIGHT Example:

t3 = time.localtime(0)
print(t3)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

注意:tm_wday:表示星期几,0(周一)~6(周天)

(3)通过结构体时间获取具体的时间信息:时间对象.时间属性名

RIGHT Example:

print('年:', t1.tm_year)

3.3.3 将字符串时间转换成结构体时间

strptime(字符串时间, 时间格式)

时间格式:包含时间占位符的字符串

注意:此时的时间格式都是指的输入的字符串时间的格式

占位符时间
%Y
%m
%H时(24小时制)
%I时(12小时制)
%M
%S
%a星期几(缩写)
%A星期几(全拼)
%b月份(单词缩写)
%B月份(单词全拼)
%p上午或下午

RIGHT Example:

t2 = '2002/3/4'
t3 = strptime(t2, '%Y/%m/%d')
print(t3, t3.tm_wday)

t4 = strptime('2022-2-10 9:24:38', '%Y-%m-%d %H:%M:%S')
print(t4)

3.3.4 将结构体时间转换成字符串时间

注意:此时的时间格式都是指的输出的字符串时间的格式

RIGHT Example:

t5 = localtime()

# 方法1
print(f'{t5.tm_year}/{t5.tm_mon:0>2}/{t5.tm_mday:0>2}/{t5.tm_hour}/{t5.tm_min}/{t5.tm_sec}')

# 方法2
result = strftime('%Y/%m/%d %H:%M:%S %p %A %B %z %c', t5)
print(result)

3.3.5 将结构体时间转换成时间戳:mktime(结构体时间)

RIGHT Example:

t6 = mktime(t5)
print(t6)

3.3.6 睡眠(等待):sleep(秒)

RIGHT Example:

sleep(2)
print('===============end==============')

3.4 datetime模块中的datetime类


3.4.1 获取当前时间

RIGHT Example:

t1 = datetime.now()
print(t1, type(t1))  # 2022-02-24 11:14:50.906124 <class 'datetime.datetime'>

t1 = datetime.today()
print(t1)

3.4.2 通过时间值创建时间对象

RIGHT Example:

t1 = datetime(2020, 8, 10)
print(t1)

t2 = datetime(2019, 10, 23, 9, 10)
print(t2)

3.4.3 通过时间对象获取时间值

RIGHT Example:

print(t1.year)
print(t1.month)
print(t1.day)
print(t1.weekday())             # 0,周一

3.4.4 时间对象转字符串时间

RIGHT Example:

result = t2.strftime('%Y年%m月%d日 %a')
print(result)                   # 2019年10月23日 Wed

3.4.5 字符串时间转时间对象

RIGHT Example:

result = datetime.strptime('今天是2022年,3月份,5号', '今天是%Y年,%m月份,%d号')
print(result)					# 2022-03-05 00:00:00

3.4.6 将时间对象转换成结构时间

RIGHT Example:

result = t1.timetuple()
print(result)

3.4.7 获取两个时间的差

RIGHT Example:

t1 = datetime(2022, 3, 5, 23, 30, 0)
t2 = datetime(2021, 5, 10, 20, 19, 0)
result = t1 - t2

# 基于时间差可以单独获取天数和秒数
print(result.days, result.seconds)   # 299 11460

3.5 datetime模块中的timedelta类

RIGHT Example:

# 2021年3月5日的10天前是哪一天?
t1 = datetime(2012, 3, 5)
print(t1 - timedelta(days=10, hours=0, minutes=0, seconds=0))  # 2012-02-24 00:00:00

# 2022-4-27:五天以后是哪一天
t1 = datetime(2022, 4, 27)
print(t1 + timedelta(days=5))

#  2022-4-27 11:38:20 18个小时前是什么时候
t1 = datetime(2022, 4, 27, 11, 38, 20)
print(t1 + timedelta(hours=18))

3.6 OS模块


3.6.1 获取当前目录

获取当前py文件所在的文件夹的路径

RIGHT Example:

result = os.getcwd()
print(result)

3.6.2 获取指定目录中所有的内容的名字

补充:路径的写法

(1)绝对路径:文件或者文件夹在计算机中的全路径,如果是windows操作系统,绝对路径从盘开始写

(2)相对路径:前提:你需要使用的文件或者文件夹必须在当前工程中

a. 写路径的时候用.表示当前目录

注意:如果相对路径是’.\ ‘开头的,’.\ '可以省略不写

b. 写路径的时候用…表示当前目录的上层目录

RIGHT Example 1 当前目录:

# 路径前加r是取消转义字符,防止反斜杠产生转义字符

# 绝对路径
result = os.listdir(r'D:\QianFeng')
print(result)
# ['PythonProject', 'Typora', '第一次分享教培.xlsx', '第一轮分享——教培.pptx']

# 相对路径
result = os.listdir(r'.\test')
print(result)
# ['demo.txt', 'demo2.txt']

# 相对路径省略'.\'
result = os.listdir(r'test')
print(result)
# ['demo.txt', 'demo2.txt']

RIGHT Example 2 返回上层目录:

result = os.listdir(r'..\..\..\..\办公\计算讲座')
print(result)
# ['「修3」计算常错如何破--讲座.pptx', '【修3】讲座,逐字稿,计算常错.doc']

3.6.3 创建文件夹

mkdir(文件夹路径):在指定位置创建指定文件夹

makedirs(文件夹路径):在指定位置创建指定文件夹(递归创建文件夹,如果路径中有多个文件夹不存在,都会自动创建)

RIGHT Example :

os.mkdir(r'新建文件夹1')
os.makedirs(r'新建文件夹2')

WRONG Example :

# 使用mkdir时,没有files文件夹会报错
os.mkdir(r'files/新建文件夹3')

RIGHT Example :

# 使用makedirs时,如果有多个文件夹不存在,会全部创建出来
os.makedirs(r'files/新建文件夹3')

3.6.4 path模块中的函数


3.6.4.1 获取绝对路径:abspath(相对路径)

RIGHT Example :

result = os.path.abspath('.')
print(result)

3.6.4.2 获取文件名:basename(文件路径)

RIGHT Example :

result = os.path.basename(r'/test/demo.py')
print(result)

3.6.4.3 判断文件是否存在:exists(文件路径)

RIGHT Example :

result = os.path.exists('test/demo2.py')
print(result)       # False

3.6.4.4 拼接路径:join(路径1, 路径2, …)

RIGHT Example :

result = os.path.join(r'.\files', 'test', 'a.txt')
print(result)		# .\files\test\a.txt

3.6.4.5 将路径切割成文件夹和文件名两个部分

RIGHT Example :

result = os.path.split('./test/demo.py')
print(result)

3.6.4.6 其他常用方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OkKFd1WX-1651139411897)(C:\Users\Sprite\AppData\Roaming\Typora\typora-user-images\image-20220420152358957.png)]

APPLICATION 写一个函数统计指定文件夹中文件和文件夹的数量 :

def num_of_file_dir(path):
    count_folder = count_file = 0
    for x in os.listdir(path):
        if os.path.isfile(f'test/{x}'):
            count_file += 1
        elif os.path.isdir(f'test/{x}'):
            count_folder += 1
    return (f'文件数量:{count_file}', f'文件夹数量:{count_folder}')


# 加if条件语句是为了让其他使用本函数的人不要触发下列测试用代码
if __name__ == '__main__':
    print(num_of_file_dir('test'))

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sprite.Nym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值