文章目录
包和模块的认识
一、模块和包
-
a) 模块的定义
- 模块就是实现了某一个或者某一类功能代码的合集,module,python文件。通常可以直接拿来使用,他们就是以模块形式存在的。
-
b) 包的定义
- package,即pycharm中的两端带下划线_init_.py文件的文件夹,可以在同一个项目中创建多个package包文件夹用来存储多个不同类型的文件。
二、模块的作用和意义
-
a) 可以简化工作,直接从别人提供给我们可以使用的API接口,只需要导入对应的模块即可拿来使用。
-
b) 可以使代码更简洁(将某些功能写成一个模块(封装函数))、更具条理性。
-
c) 能够帮助我们更有逻辑的组织Python代码,通过将相关代码分配到一个模块里能够让我们的代码更好用、更易懂、更方便的重复调用。
三、Python中模块的分类
-
python中的模块可分为:内置模块、三方模块、自定义模块。
-
a) 内置模块
-
内置模块就是在python中已经内置的模块,即安装python时随python附带的一些功能模块,直接拿来就可以使用。
-
python中的内置模块见下表:
| 内置模块 | 模块功能 |
| ------ | ------------------------------------- |
| os | 和系统功能相关的模块 |
| random | 用于生成随机数或用来做随机事件的模块。 |
| logging | 用于日志处理的模块。 |
| re | 用于实现正则表达式匹配的模块 |
| time | 和时间相关的模块 |
| json | 和字符串、json数据相互转换相关的模 |
-
-
b) 三方模块
- 三方模块就是一些Python开发者开发好的模块,需要在线安装对应库并导入才能使用。
- 三方模块存在于Python的模块仓库中:Pypi
- python中的三方模块见下表:
scrapy | 在爬虫领域非常强大的爬虫模块 |
Flask、Django | 轻量级的开发Web开发框架 |
requests | http模块,常用于发送http请求 |
tqdm | 进度条模块 |
ujson | 功能等同于json,性能优于json(编写语言不同) |
-
c) 自定义模块调用
- 自定义模块就是我们根据实际需求开发的模块,通常是对某段逻辑或某些函数进行封装,供其他函数调用,使用时我们需要将其引入到我们的项目中,也可以说是**个人根据业务需求经常需要复用的功能进行封装的产物。**一个python文件就是一个模块。
# 创建一个python文件,设置文件名为moduleOne。
def numSum(start, end):
total = 0
for i in range(start, end + 1):
total += i
return f'[{start},{end + 1})中整数的和为{total}'
# if __name__ == '__main__':缩进下的代码能够让此模块被调用时实参结果不执行。
if __name__ == '__main__':
print(numSum(1, 50))
# 打印结果为:[1,51)中整数的和为1275
# 另一个文件调用该文件的文件名
from moduleOne import numSum
print(numSum(1, 100))
# 打印结果为:[1,101)中整数的和为5050
- d) 需要注意的是:自定义模块的命名一定不能与内置模块或三方模块****重名,否则会将其覆盖掉。
四、三方模块如何安装?
安装三方模块可以有三种路径:
-
a) 可视化安装:
- 找Pycharm提供的安装功能。
- windows版本:File > settings > project:xxx > Python Interpreter > + > Install Package
- mac版本:Pycharm > preferences > project:xxx > Python Interpreter > +
- 找Pycharm提供的安装功能。
-
b) pycharm命令行安装
-
首先要打开命令行(终端、Terminal)
-
1.先**检查虚拟环境(venv)**有没有激活。
只针对windows
-
2.微软禁用了终端执行脚本的功能,要解除功能:https:/go.microsoft.com/fwlink/?LinkID=135170;
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser(一次修改,永久使用) -
3.激活虚拟环境的命令:venv/Scripts/activate
-
4.使用pip/pip3 list命令查看已安装模块
-
5.修改镜像源
pip config set global.index-url https://pypi.douban.com/simple
pip3 config set global.index-url https://pypi.douban.com/simple
windows:pip.ini; mac:pip.conf -
6.在线安装模块: pip/pip3 install 模块名
pip install tqdm
pip3 install tqdm
-
-
c) 将某个模块源码拿下来,直接编译源码安装。
- 7.这里插入一个tqdm模块的安装过程:
from tqdm import tqdm
# 有进度条无打印,有打印无进度条
# tqdm方法操作的对象是容器
for i in tqdm(range(1,100000000),desc='这是一个进度条'):
pass
五、如何导入模块?
1、导入模块有以下几种方法,另外还要注意的就是几种模块的使用规则。
- a) import + 模块名
import random
random.random()
-
这种方法的优缺点:使用这种语法导入模块,会导致指定模块中的所程序内存占用高,执行速度慢。会将指定模块中的所有成员(变量、函数、类等)全部导入到你的程序中,会造成程序的性能低下。
-
想使用模块中的方法还需要使用 模块名.方法名 的形式,否则就会报错。
-
b) import 模块名 as 别名
import pandas as pd
pd.read_csv()
- 这种模块导入方法,可以给导入的模块设置别名,以至于模块名过长时,可以简化模块名。
- c) from 模块名 import *
from random import *
randint(1, 100)
-
这种模块导入形式也是将某个模块中的所有成员全部导入,只是在调用时不需要再使用 模块名.方法名 而已。
-
d) from 模块名 import 方法名
from random import randint
randint(1, 100)
-
这种模块导入形式就是使用哪个方法就导入哪个方法,无需再担心因为全部成员导入而造成性能的低下问题。
-
e) from 模块名 import 方法名 as 别名
from module1 import foo as foo1
from module2 import foo as foo2
- 这种模块的导入形式就是将导入的模块中的方法名做别名,因为很多模块中都会有重名的方法,这样做可以很好的对方法名做区分。
六、JSON模块的解析
1、json模块是python内置的库,在使用的时候直接导入就可以。
import json
2、json模块的操作使用相对较为简单,该模块只有四个方法dump()、load()、dumps()、loads()。
3、json模块的主要功能是将序列化数据从文件里读取出来或者存入文件。
- dump()是将数据存入文件中
- load()是用于读取文件。
- 而dumps()和loads()是对python对象进行操作。dumps()是将python对象编码成json字符串。
# json 对象(Python字典)
d = {"name": "吴亦凡"}
s2 = json.dumps(d)
print(s2, type(s2))
# {"name": "\u5434\u4ea6\u51e1"} <class 'str'>
- loads()是将json字符串解码成python对象。
# json 字符串
s = '{"name": "吴亦凡"}'
# json字符串 => json对象(Python字典)
s = '{"name":"吴亦凡"}'
d = json.loads(s)
print(d, type(d))
# {'name':'吴亦凡'} <class 'dict'>
七、随机模块之random
1、常用的random模块使用方法一共有7种: 如下表
randrange() | 从range()产生的容器中随机选择一个元素。 |
random() | 从 [0,1) 范围中随机产生一个浮点数 |
randint() | 从 [a,b] 中随机选取一个整数 ; 注意是闭区间! |
choice() | 从容器中随机选取一个元素 |
choices() | 从容器中随机选取K个元素(放回的取元素) |
sample() | 从容器中随机选取K个元素(不放回的取元素) |
shuffle() | 打乱有序、可变容器(列表)中元素的顺序 |
2、各种方法的使用
- randrange() :从range()产生的容器中随机选择一个元素。
print(random.randrange(1, 11, 2))
- random():从[0,1)范围中随机产生一个浮点数
print(random.random())
- randint():从[a,b]中随机选取一个整数
print(random.randint(1, 100))
- choice():从容器中随机选取一个元素
names = ['张三', '李四', '王五']
print(random.choice(names))
- choices():从容器中随机选取K个元素(放回的取元素)
print(random.choices(names, k=5))
- sample():从容器中随机选取K个元素(不放回的取元素)
print(random.sample(names, k=3))
- shuffle():打乱有序、可变容器(列表)中元素的顺序
random.shuffle(names)
print(names)
3、创建一个随机提问的小程序
- 要求每次提问前可以设置一次性抽取的学生个数
- 允许一个学生多次被提问。
print('开始抽取学生.........')
students = ['张三', '李四', '王五', '赵六', '孙七']
random.shuffle(students)
result = random.choices(students, k=5)
print(f'中招学生为{result}')
八、OS模块的那点儿事
1、os模块的作用
- a) Windows、Linux、Macos、Android等操作系统自带的一系列功能。
- b) 可以使用代码实现(新建文件、移动、复制、删除、重命名等操作)。
2、os模块的用法
- a) **os.listdir (path) ** : 查看指定路径下的所有条目(文件、文件夹)
# 用法:
'''
namelist = os.listdir()
print(namelist)
'''
# 查看当前project路径下是否存在'成都链家二手房数据'
dataList = os.listdir('成都链家二手房数据')
print(dataList)
for i in dataList:
if i[i.index('.'):] == '.csv':
pass
- b) os. path .exists(path) : 查看指定的文件或文件夹是否存在,返回True或者False。
- c) os. mkdir (path) : 在当前project项目下创建一个指定名称的文件夹。
ok.mkdir('./成都链家')
- d) os. rmdir (path) : 移除一个指定名称的文件夹,被移除的文件夹必须保证为空。
if os.path.exists('成都链家') and os.path.exits('./成都链家/111'):
os.rmdir('./成都链家/111')
os.rmdir('./成都链家')
os.mkdir('./成都链家')
os.mkdir('./成都链家/111')
-
e) os.rename(str, dst)
- str: 某个文件的原名称; dst: 被移动的路径和新名称。
# 将成都链家二手房数据文件夹中的csv文件的成都两个字去掉,再移动到成都链家文件夹。
for name in os.listdir('成都链家二手房数据'):
if name[name.rfind('.'):] == '.csv':
old_path = f'./成都链家二手房数据/{name}'
new_path = f'./成都链家/{name[2:]}'
os.rename(old_path, new_path)
-
f) os . system(命令) - 使用os 模块的system的system方法执行Linux命令。
- 清屏命令: windows – > cls; mac – > clear;
- os. system ( ‘cls’ )