python 必备模块和包_Python模块与包

一、模块的定义与使用

1.1、模块的定义Python中,模块在物理形式上表现为以.py结尾的代码文件

一个文件被看作一个独立的模块, 一个模块也可以被看作一个文件; 每个模块都有自己的名称空间。Pyhton允许”导入”其他模块以实现代码重用, 从而实现了将独立的代码文件组织成更大的程序系统。在一个模块顶层定义的所有变量都在被导入时成为了被导入模块的属性。一个python程序通常包括一个顶层文件和其他的模版文件

顶层文件:包含了程序的主要控制流程

模块文件:为顶层文件或其他模块提供各种功能性组件。模块首次导入(或重载)时,Python会立即执行模块文件的顶层程序代码,而位于函数主体内的代码知道函数被调用后才执行。

1.2、导入模块

在导入模块时只能使用模块名,而不能使用带.py后缀的模块文件名import语句,导入指定的整个模块,包括生成一个以模块名命名的名称空间import module [ , module2 [,...moduleN]]建议一个import语句只导入一个模块import module as module_alias

from-import语句, 常用于只导入指定模块的部分属性至当前名称空间

from module import name1[ , name2 [, ...nameN]]

import和from是可执行的, 类似于def,他们可以嵌套在if测试中,出现于def中等等。Python执行到这些语句时才会对其进行解析,所有来自模块的属性仅在import语句执行后才能使用。

import和from都是隐性赋值语句;import将整个模块对象赋值给一个变量名,from将一个或多个变量名赋值给导入此模块中的同名对象。In [1]: import requests #导入整个requests模块

In [2]: dir(requests) #查看requests模块所支持的方法

Out[2]:

['ConnectTimeout',

'ConnectionError',

'DependencyWarning',

'FileModeWarning',

'HTTPError',

'NullHandler',

'PreparedRequest',

'ReadTimeout',

'Request',

'RequestException',

'Response',

'Session',

'Timeout',

'TooManyRedirects',

'URLRequired',

'__author__',

'__build__',

'__builtins__',

'__cached__',

'__copyright__',

'__doc__',

'__file__',

'__license__',

'__loader__',

'__name__',

'__package__',

'__path__',

'__spec__',

'__title__',

'__version__',

'_internal_utils',

'adapters',

'api',

'auth',

'certs',

'codes',

'compat',

'cookies',

'delete',

'exceptions',

'get',

'head',

'hooks',

'logging',

'models',

'options',

'packages',

'patch',

'post',

'put',

'request',

'session',

'sessions',

'status_codes',

'structures',

'utils',

'warnings']

In [3]: from bs4 import BeautifulSoup #从bs4模块中导入BeautifulSoup方法

1.3、import工作机制import语句导入指定的模块时会执行三个步骤1、找到模块文件:在指定的路径下搜索模块文件

2、编译成字节码:文件导入时就会编译,顶层文件.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件。

3、执行模块的代码来创建其所定义的对象:模块文件中的所有语句会依次执行,从头到尾,而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性。

模块只有在第一次导入才会执行如上步骤,后续的导入操作只不过是提取内存中已加载的模块对象,reload()可用于重载加载模块。

1.4、模块的搜索路径

Python解释器在import模块时必须先找到对应的模块文件,主要有以下四个目录:程序的主目录;

PYTHONPATH目录(如果设置的此变量);

标准链接库目录;任何.pth文件的内容(如果存在.pth文件)

这四个组合起来即为sys.path所包含的路径,python会选择在搜索路径中的第一个符合导入文件名的文件。In [6]: sys.path

Out[6]:

['', #空字符串代表当前工作目录

'/application/python36/bin',

'/application/python36/lib/python36.zip',

'/application/python36/lib/python3.6',

'/application/python36/lib/python3.6/lib-dynload',

'/application/python36/lib/python3.6/site-packages',

'/application/python36/lib/python3.6/site-packages/IPython/extensions',

'/root/.ipython']

1.4、包

包用于将一组模块归并到一个目录中,此目录即为包,目录名位包名。包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的应用程序执行环境;基于包,python在执行模块导入时可以指定模块的导入路径。

wKioL1jrGwTByEdmAABmNyL9uKM832.png-wh_500x0-wm_3-wmp_4-s_1816153082.pngimport dir1.dir2.mod1

要使用如图所示的package1,则py_pkg_mod容器必须要在模块搜索路径中import package1.mod1

包导入语句的路径内的每个目录内必须有__init__.py文件;__init__.py可以包含代码,但通常为空,仅用于扮演包初始化的挂钩、 替目录产生模块命名空间以及使用目录导入时实现from *行为的角色。

1.5、模块的属性每个模块都有个名为__name__的内置属性,python会自动设置该属性如果文件以顶层程序文件执行, 在启动时,__name__的值为”__main__”;如果是被导入,则__name__的值为模块名。可以在模块文件中检测自己的__name__属性,以之实现在执行时运行制定的代码或者进行自我测试。def testFunc():

print('Hello,there...')

if __name__=='__main__':

testFunc()

1.6、发布python模块或程序Python模块、扩展和应用程序可以按以下几种形式进行打包和发布压缩文件(使用distutils):windows的zip文件和类unix的.tar.gz文件;

自动解包或自动安装可执行程序:windows中的.exe文件;

自包含的, 不要求安装的预备运行可执行程序:windows中的.exe文件;unix上带有一个小的脚本前缀的ZIP压缩文件等;

平台相关的安装程序:windows上的.msi文件、linux上常见的.rpm、src.rpm等。使用disutils发布模块

“发布”是指一个文件集合,这些文件联合在一起可使用distutils构建、打包和发布等创建好的发布可用于安装,也可用于上传到PyPI与他人分享。创建发布

将各代码文件组织到模块容器中;准备一个README或者README.txt文件;而后在容器中创建setup.py文件。

在要发布的容器目录中执行”python setup.py sdist”命令。from distutils.core import setup #setup.py中的代码示例

setup(

name ='hello_py',

version ='0.0.1',

author ='mypython',

author_email ='mypython@edu.com',

py_modules =['hello'],

url ='a.simple.com',

description ='print hello',

)

获取帮助的方式:python setup.py --help

python setup.py --help-commands:所有可以使用的命令, 如build, install

python setup.py COMMAND --help:获取特定命令的帮助python setup.py COMMAND --help-formats: 获取特定命令支持使用的格式

二、常用模块OS 模块目录:

chdir(): 改变工作目录chroot():设定当前进程的根目录listdir():列出指定目录下的所有文件名mkdir():创建指定目录makedirs():创建多级目录getcwd():返回当前目录下的文件信息rmdir():删除目录removedirs():删除多级目录

文件:

mkfifo():创建管道 mknod(): 创建nod节点

remove():删除文件unlink():取消链接

rename():重命名stat():返回文件状态信息symlink():创建符号链接 utime():更新时间戳tmpfile():创建并打开(w+b)一个新的临时文件

访问权限:

access(): 访问权限 chmod():修改权限chown(): 修改属主,属组umask():设置默认权限模式

文件描述符:

open(): 打开文件描述符

read(): 读取文件

write():写文件

设备文件:

mkdev():创建设备

major():主节点

minor():次节点

os.path:跟文件路径相关basename():路径基名dirname():路径目录名join():连接多个路径split():返回dirname(),basename()元组splitext():返回(filename, extension)元组

文件信息:

getatime():获取访问时间

getctime():获取元数据修改时间

getmtime():获取文件内容修改时间

getsize():返回文件的大小

查询:

exists():判断指定文件是否存在isabs():判断指定的路径是否为绝对路径isdir():是否为目录isfile():是否为文件islink():是否符号链接ismount():是否为挂载点samefile():两个路径是否指向了同一个文件sys 模块sys.argv命令行参数List,第一个元素是程序本身路径sys.exit(n)退出程序,正常退出时exit(0)

sys.version获取Python解释程序的版本信息sys.maxint最大的Int值sys.path返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值sys.platform返回操作系统平台名称sys.stdout.write('please:')进度条

val = sys.stdin.readline()[:-1] #从键盘输入设置变量In [5]: var=sys.stdin.readline()[:-1]

ls

In [6]: var

Out[6]: 'ls'

shutil高级的文件、文件夹、压缩包处理模块shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中,可以部分内容shutil.copyfile(src, dst)拷贝文件shutil.copymode(src, dst)仅拷贝权限。 内容、 组、 用户均不变shutil.copystat(src, dst)拷贝状态的信息, 包括:mode bits, atime, mtime, flags

shutil.copy(src, dst)拷贝文件和权限shutil.copy2(src, dst)拷贝文件和状态信息shutil.ignore_patterns(*patterns)

shutil.copytree(src, dst, symlinks=False, ignore=None)递归的去拷贝文件shutil.rmtree(path[, ignore_errors[, onerror]])递归的去删除文件shutil.move(src, dst)递归的去移动文件

shutil.make_archive(base_name, format,...)创建压缩包并返回文件路径,例如:zip、tarbase_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,

如:www =>保存至当前路径

如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/

format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”

root_dir: 要压缩的文件夹路径( 默认当前目录)owner: 用户, 默认当前用户group: 组, 默认当前组logger: 用于记录日志, 通常是logging.Logger对象#shutil对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的。

import zipfile

# 压缩

z = zipfile.ZipFile('laxi.zip', 'w')

z.write('a.log')

z.write('data.data')

z.close()

# 解压

z = zipfile.ZipFile('laxi.zip', 'r')

z.extractall()

z.close()

# 压缩

tar = tarfile.open('your.tar','w')

tar.add('/Users/bbs.zip', arcname='bbs.zip')

tar.add('/Users/cmdb.zip', arcname='cmdb.zip')

tar.close()

# 解压

tar = tarfile.open('your.tar','r')

tar.extractall() # 可设置解压地址

tar.close()xml处理模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单;xml的格式如下,就是通过<>节点来区别数据结构的。<?xml version='1.0'?>

Alexia

23

Female

ConfigParser模块

用于生成和修改常见配置文档。[english] #配置文件样式

greeting = Hello

[french]

greeting = Bonjour

[files]

home = /usr/local

# simple interpolation:

bin = %(home)s/binyaml模块

与json相似、 同样有键值。 主要用来处理日期和时间这样的数据类型。load()将yaml字符串转换为python数据;

dump()相反,将python数据转换为yaml字符串。name: #yaml文件样式

first: James

last: McIntyre

dates:

birth: 1828-05-25

death: 1906-03-31

details:

bearded: true

themes: [cheese, Canada]

books:

url: http://www.gutenberg.org/files/36068/36068-h/36068-h.htm

poems:

- title: 'Motto'

text: |

Politeness, perseverance and pluck,

To their possessor will bring good luck.

- title: 'Canadian Charms'

text: |

Here industry is not in vain,

For we have bounteous crops of grain,

And you behold on every field

Of grass and roots abundant yield,

But after all the greatest charm

Is the snug home upon the farm,

And stone walls now keep cattle warm.hashlib模块

用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256, SHA384,SHA512,MD5算法。python还有一个hmac模块,它内部对我们创建key和内容再进行处理然后再加密散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code) 的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;

一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key+ 消息明文再加密,拿加密后的值跟发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。In [7]: import hmac

In [8]: h= hmac.new(b'1213',b'45678')

In [9]: print(h.hexdigest)

>

In [10]: print(h.hexdigest())

da66020747fb19dec23ba317f759d2deSubprocess模块

#生成新进程, 连接输入/输出/错误管道。>>> retcode = subprocess.call(["ls", "-l"])

#执行命令, 如果命令结果为0, 就正常返回, 否则抛异常>>> subprocess.getstatusoutput('ls /bin/ls')

#接收字符串格式命令, 返回元组形式, 第1个元素是执行状态, 第2个是命令结果>>> subprocess.getoutput('ls /bin/ls')

#接收字符串格式命令, 并返回结果>>> res=subprocess.check_output(['ls','-l'])

#执行命令,并返回结果,注意是返回结果,不是打印,下例结果返回给res

底层都是封装的subprocess.Popenpoll() #检查子进程是否已终止。返回returnCode

wait() #等待子进程终止。返回returnCode属性。

terminate() #杀掉所启动进程

communicate() #等待任务结束

subprocess.Popen() #打开子进程

args:shell命令,可以是字符串或者序列类型( 如:list, 元组)bufsize:指定缓冲。0无缓冲,1行缓冲,其他 缓冲区大小,负值 系统缓冲stdin, stdout, stderr: 分别表示程序的标准输入、输出、错误句柄preexec_fn:Unix平台下有效,用于指定可执行对象,它将在子进程运行之前被调用close_sfs:windows平台下,close_fds被设置为True时,则新创建的子进程将不会继承父进程的输入、输出、错误管道。所以不能将close_fds设置为True同时重定向子进程的标准输入、 输出与错误。shell:同上cwd: 用于设置子进程的当前目录env: 用于指定子进程的环境变量。env = None,子进程的环境变量将从父进程中继承。startupinfo与createionflags只在windows下有效将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等。logging

用于便捷记录日志且线程安全的模块。logging.basicConfig(filename='log.log', #设置日志文件

format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',#日志格式

datefmt='%Y-%m-%d %H:%M:%S %p', #时间戳

level=10) #日志等级

logging.debug('debug') logging.info('info') logging.warning('warning')

logging.error('error') logging.critical('critical') logging.log(10,'log')

日志等级:CRITICAL = 50

FATAL = CRITICAL

ERROR = 40

WARNING = 30

WARN = WARNING

INFO = 20

DEBUG = 10

NOTSET = 0

Python使用logging模块记录日志涉及四个主要类:

logger提供了应用程序可以直接使用的接口;handler将(logger创建的)日志记录发送到合适的目的输出;filter提供了细度设备来决定输出哪条日志记录;formatter决定日志记录的最终输出格式。

logger每个程序在输出信息之前都要获得一个Logger。Logger通常对应了程序的模块名,比如聊天工具的图形界面模块可以这样获得它的Logger:LOG=logging.getLogger(”chat.gui”)

LOG=logging.getLogger(”chat.kernel”)

Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。

Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filterLogger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler

可以设置的日志级别:

Logger.debug()、

Logger.info()、

Logger.warning()、

Logger.error()、

Logger.critical():

handler对象负责发送相关的信息到指定目的地。Python的日志系统有些Handler可以把信息输出到控制台,有些Logger可以把信息输出到文件,还有些Handler可以把信息发送到网络上。

logging.StreamHandler向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。logging.FileHandler用于向一个文件输出日志信息。 不过FileHandler会帮你打开这个文件。logging.handlers.RotatingFileHandler类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建 一个新的同名日志文件继续输出。logging.handlers.TimedRotatingFileHandler与RotatingFileHandler类似,但它是间隔一定时间就自动创建新的日志文件。重命名的过程与RotatingFileHandler类似,不过新的文件不是附加数字,而是当前时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值