Python模块的几种类型简介

Python022

Python模块的几种类型简介,第1张

1、系统内置模块

os模块:os模块包含普遍的操作系统功能

sys模块:提供了一系列有关Python运行环境的变量和函数

random模块:random模块用于生成随机数

time 模块: 主要包含各种提供日期、时间功能的类和函数

datetime模块:对time模块的一个高级封装

shutil模块:是一种高层次的文件操作工具

logging模块:将日志打印到了标准输出中

re模块:可以直接调用来实现正则匹配

pymysql模块:连接数据库,并实现简单的增删改查

threading模块:提供了更强大的多线程管理方案

queue模块:实现了多生产者,多消费者的队列

json模块:用于字符串和数据类型间进行转换json

2、开源(三方)模块

Requests:最富盛名的http库。每个Python程序员都应该有它。

Scrapy:从事爬虫相关的工作,这个库也是必不可少的。

NumPy:为Python提供了很多高级的数学方法。

matplotlib:一个绘制数据图的库。对于数据分析师非常有用。

Pygame:开发2D游戏的时候可以用上 。

Scapy:用Python写的数据包探测和分析库。

Django:开源Web开发框架,它鼓励快速开发,并遵循MVC设计,开发周期短。

Py2exe:将python脚本转换为windows上可以独立运行的可执行程序。

BeautifulSoup:基于Python的HTML/XML解析器,简单易用。

PyGtk:基于Python的GUI程序开发GTK+库。

3、自定义模块

自定义模块是自己写的模块,对某段逻辑或某些函数进行封装后供其他函数调用。

注意:自定义模块的命名一定不能和系统内置的模块重名了,否则将不能再导入系统的内置模块了。

例如:自定义了一个sys.py模块后,再想使用系统的sys模块是不能使用的。

import os

print(os.name)  # 操作系统名称  Windows nt 非Windows posix

print(os.sep)  # 路径分隔符    Windows \    其他 /

import os

# 使用 os.path 方法获取文件的路径

# 001.获取文件的绝对路径 使用abspath方法

print(os.path.abspath("04_模块导入.py"))

#  运行结果:D:\mypycharm\pythonProject\千峰培训\day11module1\04_模块导入.py

# 002判断是否是文件 False

print(os.path.isdir("")) 

# 运行结果: False

# 003.判断文件是否存在如果存在返回True 否则返回False

print(os.path.exists("mydir"))

# True

import os

files = "2020.12.22.test.py"

print(files.rpartition(".")[-1]) 

print(os.path.splitext(files)[-1])

# 运行结果:

# 获取文件的后缀名  py

# 获取文件的后缀名 .py

import os

print(os.getcwd())

# 运行结果:

# D:\mypycharm\pythonProject\培训\day11module1

import os

os.chdir("mydir")

print(os.getcwd())

# D:\mypycharm\pythonProject\培训\day11module1\mydir

import os

os.rename("66.py","../99.py")

import os

# 001.删除文件

os.remove("../99.py")

# 002.删除空文件夹

os.rmdir("../mydir")

os.removedirs("mydir")

import os

os.mkdir("mydir")

import os

# 001.列出指定目录里所有的子目录和文件

print(os.listdir("D:\mypycharm\pythonProject"))

# 002.默认当前目录里的 子目录和文件

print(os.listdir())

# 运行结果:

# ['.idea', '千峰培训', '学校实习']

# ['03_module.py', '04_模块导入.py', '05_os.py', '2020.12.22.tests.py', 'a01_module1.py', 'a02_module2.py', '__pycache__']

import os

print(os.environ)

print(os.environ["PATH"])

import os

import string  # 字符串模块

import random

files = "test.jpg"

#  01.获取文件的后缀

surffix = os.path.splitext(files)[-1]

# print(surffix)  # .jpg

# 02.生成所有大小写字母的列表

res = list(string.ascii_letters)

# print(string.ascii_letters)

# 运行结果;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

#  03.将0-9添加到res中

for i in range(0, 10):

    res.append(str(i))

# 04.随机生成文件名:

mystr = "".join(random.sample(res, 10))  #  sample随机生成10个字符

# print(mystr)

# bJpED6dj2Y

# 05.将文件名和后缀拼接

print(mystr+surffix)

import sys

print(sys.path)

res = sys.stdin

print(res)

import math

# print(math.pi)  # 3.141592653589793

print(math.factorial(5))  # 120

# 幂运算 第一个参数是底数 第二个参数是幂

print(math.pow(2, 3))  # 8.0

# 向上取整和向下取整

print(math.floor(15.999))  # 15

print(math.ceil(15.001))  # 16

# 四舍五入

print(round(123.51, 1))  # 123.5

# 三角函数

print(math.sin(math.pi / 6))  # sin(pi/6) 0.49999999999999994

print(math.cos(math.pi / 3))  # sin(pi/3) 0.5000000000000001

print(math.tan(math.pi / 4))  # sin(pi/6) 0.9999999999999999

# 开方

a = 9

b = 16

print(math.sqrt(a+b))  # 5.0

# 以e为底的指数函数

print(math.exp(a))

#  8103.083927575384

import random

# 01.random()  随机生成[0,1)之间的数  前闭后开

print(random.random())  # 生成[0,1)之间的小数

# 02.randint() 生成范围内的随机整数        全闭

print(random.randint(10, 20))  # 生成[10,20]之间的整数

# 03.randrange() 生成范围内的随机整数      前闭后开

print(random.randrange(10, 20))  # 生成[10,20)之间的整数

# 04.choice  参数是列表  随机从列表中取一个  取一次

print(random.choice([1, 2, 3, 4, 5, 6, 77, 8, 9]))

# 05.sample 的第一个参数 必须是一个可迭代对象

#          第二个参数代表着从可迭代对象从随机选取几个,选取的对象不能重复

print("".join(random.sample(["a", "b", "c", "d"], 3)))

import datetime as dt # 引入datetime 模块并将其命别名为dt

import time

import calendar  # 引入日历模块

# 01.datetime模块

# 001.获取当前时间的具体信息

print(dt.datetime.now()) 

# 运行结果:

# 2020-12-26 15:36:36.408129

# 年    月 日  时 分 秒  毫秒

# 002.创建日期

print(dt.date(2020,1,1)) 

# 年月日  2020-01-01

# 003.创建时间

print(dt.time(16,30,30))

# 时 分 秒:  16:30:30

# 004.timedelta() 括号中的默认参数是天

print(dt.datetime.now()+dt.timedelta(3))  # 2020-12-25 15:50:15.811738

print(dt.datetime.now()+dt.timedelta(hours=3))  # 2020-12-22 18:51:41.723093

print(dt.datetime.now()+dt.timedelta(minutes=10))  # 2020-12-22 16:01:41.723093

# 02.time

# 001.当前时间的时间戳

# 时间戳是指从1970—01-01 0:0:0到现在的秒数 utc时间 也叫格林尼治时间 

print(time.time())

# 002.按照指定格式输出时间

# print(time.strftime("%Y-%m-%d %H:%M:%S"))  # 2020-12-22 15:57:49

# 时间格式:

# %Y  Year with century as a decimal number.

# %m  Month as a decimal number [01,12].

# %d  Day of the month as a decimal number [01,31].

# %H  Hour (24-hour clock) as a decimal number [00,23].

# %M  Minute as a decimal number [00,59].

# %S  Second as a decimal number [00,61].

# %z  Time zone offset from UTC.

# %a  Locale's abbreviated weekday name.

# %A  Locale's full weekday name.

# %b  Locale's abbreviated month name.

# %B  Locale's full month name.

# %c  Locale's appropriate date and time representation.

# %I  Hour (12-hour clock) as a decimal number [01,12].

# %p  Locale's equivalent of either AM or PM.

# 003.ctime 和 asctime 时间格式  输出的时间格式一样,

# print(time.asctime())  # Tue Dec 22 15:57:49 2020

# print(time.ctime())  # Tue Dec 22 15:58:35 2020

# 004.sleep()  时间休眠

print("我负责浪")

print(time.sleep(3))

print("你负责漫")

# 005.calender 生成日历

res = calendar.calendar(2021)  # 生成2021年的日历

print(res)

# 006.判断是否为闰年

print(calendar.isleap(2020))  # True

# 007.从1988年 到 2020年有多少个闰年

print(calendar.leapdays(1988, 2020))  # 8

本章是《从到Python》系列连载的最后一章 内容较简单 主要介绍Python中模块与包的使用方法 如果你对这部分内容已经比较熟悉 就不要再浪费时间看了 写这一章只是为了整个系列完整而已 没什么新的东西(本章内容主要参考了《Python精要参考》的第八章《模块和包》)

  模块

Python的脚本都是用扩展名为py的文本文件保存的 一个脚本可以单独运行 也可以导入另一个脚本中运行 当脚本被导入运行时 我们将其称为模块(module) 模块是Python组织代码的基本方式

模块名与脚本的文件名相同 例如我们编写了一个名为Items py的脚本 则可在另外一个脚本中用import Items语句来导入它 在导入时 Python解释器会先在脚本当前目录下查找 如果没有则在sys path包含的路径中查找

在导入模块时 Python会做以下三件事

( ) 为模块文件中定义的对象创建一个名字空间 通过这个名字空间可以访问到模块中定义的函数及变量

( ) 在新创建的名字空间里执行模块文件

( ) 创建一个名为模块文件的对象 该对象引用模块的名字空间 这样就可以通过这个对象访问模块中的函数及变量 如

 import sys print sys path

如果要同时导入多个模块 可以用逗号分隔 如 import sys os

可以使用as关键字来改变模块的引用对象名 如 import os as system

也可以用from语句将模块中的对象直接导入到当前的名字空间(不创建模块名字空间的引用对象) 如 from socket import gethostname

from语句支持逗号分割的对象 也可以使用星号(*)代表模块中除下划线开头的所有对象 如 from socket import * 这是个懒省事的方法 我是经常用 不过用之前最好先搞清楚会不会覆盖当前名字空间中的函数名等 总之不是个好习惯:)

除了Python脚本(不仅限于py 还包括pyc和pyo) import语句还可以导入C或扩展(已编译为共享库或DLL文件) 包(包含多个模块 一会介绍)和内建模块(使用C编写并已链接到Python解释器内) 不过除了包 另外两个我也没用过:(

Python解释器在第一次import一个py文件的时候 会尝试将其编译为字节码文件 这个文件的扩展名通常为 pyc 它是已经完成语法检查并转译为虚拟机指令的代码 后边的导入操作会直接读取 pyc文件而不是 py文件 一般而言速度会更快

  包

Python的模块可以按目录组织为包(package) 一般来说 我们将多个关系密切的模块组织成一个包 以便于维护和使用 同时可有效避免名字空间冲突 创建一个包的步骤是 建立一个名字为包名字的文件夹 并在该文件夹下创建一个__init__ py文件 你可以根据需要在该文件夹下存放脚本文件 已编译扩展及子包

一个典型的包可能有以下结构:

   package /   __init__ py   subPack /   __init__ py   module_ py   module_ py   module_ py   subPack /   __init__ py  module_ py  module_ py  ……

只要目录下存在__init__ py 就表明此目录应被作为一个package处理 在最简单的例子中 __init__ py 是一个空文件 不过一般我们都要在__init__ py中做一些包的初始化动作 或是设定一些变量

最常用的变量是__all__ 当使用包的人在用from pack import * 语句导入的时候 系统会查找目录pack下的__init__ py文件中的__all__这个变量 __all__是一个list 包含了所有应该被导入的模块名称 例如 __all__ = [ m m m ] 表示当from pack import * 时会import 这三个module

如果没有定义__all__ from pack import * 不会保证所有的子模块被导入 所以要么通过__init py__ 要么显式地import 以保证子模块被导入 如 import pack m   pack m   pack m

  本章小结

本章介绍了Python中模块与包的使用方法 要点如下

( ) 模块是一个可以导入的Python脚本文件

( ) 包是一堆按目录组织的模块和子包 目录下的__init__ py文件存放了包的信息

( ) 可以用import import as form import 等语句导入模块和包

总之 模块与包是在物理上组织Python代码复用的一种有效方式 它有点类似于中的程序集(Assembly) 初学Python不一定要会自己建立模块和包 但一定要学会使用各种包 这正是Python的强大之处 Python带着各种各样的battery 当你想完成一项功能时 最好先去搜索是不是有相关的包能够复用(多数情况下是这样的 因为在各种领域都有太多的人在为Python作著贡献) 而且 绝大多数Python包都是开源的 研读优秀的代码也是提高编程能力的一种有效途径

进一步阅读的参考

《从C#到Python》系列连载到今天就全部写完了 非常感谢各位的支持 鼓励以及批评 使我能够不断完善和提高 读完这个连载 在Python的语法上应该够应付一阵了 当然结合具体的应用领域 还是有很多东西需要不断学习 在此向大家推荐一些有用的读物

[ ] 科学计算方面 这个是我的应用Python的主阵地 推荐HYRY Studio的《用Python做科学计算》(见) 我个人认为非常优秀的一本原创著作(这么好的书不知为何不正式出版 钦佩作者的rp !)

[ ] GUI开发方面 如果你用wxPython 那么肯定要看《wxPython in Action》(中文版见) 而我个人主要用PyQt 这方面值得推荐的读物是柴树杉翻译的《PyQt 编程简介》(见) 如果英文好 还是推荐看《Rapid GUI Programming with Python and Qt》(英文pdf版地址 Oct pdf)

[ ] 开发方面 这个我还没有涉及 Django的资料网上也是大把了 其它的Python Web开发框架也是多如牛毛 自己找找吧 )

lishixinzhi/Article/program/ASP/201311/21672