有趣的包和模块

包和模块的认识

一、模块和包

  • 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开发框架
requestshttp模块,常用于发送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 > +
  • 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’ )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

stiinput

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

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

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

打赏作者

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

抵扣说明:

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

余额充值