您的位置:首页 > 编程语言 > Python开发

转载:python基础之模块

2016-01-21 09:05 477 查看
作者:武沛齐
出处:http://www.cnblogs.com/wupeiqi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

模块,用一砣代码实现了某个功能的代码集合。

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个.py文件组成的代码集合就称为模块。

如:os是系统相关的模块;file是文件操作相关的模块

模块分为三种:

自定义模块

内置模块

开源模块

自定义模块

1、定义模块

情景一:

  执行命令-通过用户名和密码连接服务器

执行命令-过密钥链接服务器

上传或者下载文件-通过用户名和密码
上传或下载文件-通过密钥

内置模块

一、os

用于提供系统级别的操作

md5-废弃
sha-废弃

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

还不够吊?python还有一个hmac模块,它内部对我们创建key和内容再进行处理然后再加密

不能再牛逼了!!!

四、json和pickle

用于序列化的两个模块

json,用于字符串和python数据类型间进行转换

pickle,用于python特有的类型和python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

commands
以上执行shell命令的相关的模块和函数的功能均在subprocess模块中实现,并提供了更丰富的功能。

call

执行命令,返回状态码

shell=True,允许shell命令是字符串形式

check_call

执行命令,如果执行状态码是0,则返回0,否则抛异常

check_output

执行命令,如果状态码是0,则返回执行结果,否则抛异常

subprocess.Popen(...)

用于执行复杂的系统命令

参数:

args:shell命令,可以是字符串或者序列类型(如:list,元组)

bufsize:指定缓冲。0无缓冲,1行缓冲,其他缓冲区大小,负值系统缓冲

stdin,stdout,stderr:分别表示程序的标准输入、输出、错误句柄

preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callableobject),它将在子进程运行之前被调用

close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin,stdout,stderr)。

shell:同上

cwd:用于设置子进程的当前目录

env:用于指定子进程的环境变量。如果env=None,子进程的环境变量将从父进程中继承。

universal_newlines:不同系统的换行符不同,True->同意使用\n

startupinfo与createionflags只在windows下有效
将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

执行普通命令
终端输入的命令分为两种:

输入即可得到输出,如:ifconfig

输入进行某环境,依赖再输入,如:python

ViewCode
ViewCode
ViewCode
ViewCode
更多猛击这里

六、shutil

高级的文件、文件夹、压缩包处理模块

shutil.copyfileobj(fsrc,fdst[,length])
将文件内容拷贝到另一个文件中,可以部分内容

ViewCode
shutil.copyfile(src,dst)
拷贝文件

ViewCode
shutil.copymode(src,dst)
仅拷贝权限。内容、组、用户均不变

ViewCode
shutil.copystat(src,dst)
拷贝状态的信息,包括:modebits,atime,mtime,flags

ViewCode
shutil.copy(src,dst)
拷贝文件和权限

ViewCode
shutil.copy2(src,dst)
拷贝文件和状态信息

ViewCode
shutil.ignore_patterns(*patterns)
shutil.copytree(src,dst,symlinks=False,ignore=None)
递归的去拷贝文件

例如:copytree(source,destination,ignore=ignore_patterns('*.pyc','tmp*'))

ViewCode
shutil.rmtree(path[,ignore_errors[,onerror]])
递归的去删除文件

ViewCode
shutil.move(src,dst)
递归的去移动文件

ViewCode
shutil.make_archive(base_name,format,...)

创建压缩包并返回文件路径,例如:zip、tar

base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www=>保存至当前路径
如:/Users/wupeiqi/www=>保存至/Users/wupeiqi/

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

root_dir: 要压缩的文件夹路径(默认当前目录)

owner: 用户,默认当前用户

group: 组,默认当前组

logger: 用于记录日志,通常是logging.Logger对象

ViewCode
shutil对压缩包的处理是调用ZipFile和TarFile两个模块来进行的,详细:

zipfile压缩解压
tarfile压缩解压
ZipFile
TarFile
七、ConfigParser

用于对特定的配置进行操作,当前模块的名称在python3.x版本中变更为configparser。

八、logging

用于便捷记录日志且线程安全的模块

对于等级:

只有大于当前日志等级的操作才会被记录。

对于格式,有如下属性可是配置:

flags
2、search(pattern,string,flags=0)

根据模型去字符串中匹配指定内容,匹配单个

importre

obj=re.search('\d+','u123uu888asf')
ifobj:
printobj.group()


3、group和groups

a="123abc456"
printre.search("([0-9]*)([a-z]*)([0-9]*)",a).group()

printre.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)
printre.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)
printre.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)

printre.search("([0-9]*)([a-z]*)([0-9]*)",a).groups()


4、findall(pattern,string,flags=0)

上述两中方式均用于匹配单值,即:只能匹配字符串中的一个,如果想要匹配到字符串中所有符合条件的元素,则需要使用findall。

importre

obj=re.findall('\d+','fa123uu888asf')
printobj


5、sub(pattern,repl,string,count=0,flags=0)

用于替换匹配的字符串

content="123abc456"
new_content=re.sub('\d+','sb',content)
#new_content=re.sub('\d+','sb',content,1)
printnew_content


相比于str.replace功能更加强大

6、split(pattern,string,maxsplit=0,flags=0)

根据指定匹配进行分组

content="'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'"
new_content=re.split('\*',content)
#new_content=re.split('\*',content,1)
printnew_content


content="'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'"
new_content=re.split('[\+\-\*\/]+',content)
#new_content=re.split('\*',content,1)
printnew_content


inpp='1-2*((60-30+(-40-5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
inpp=re.sub('\s*','',inpp)
new_content=re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)',inpp,1)
printnew_content


相比于str.split更加强大

实例:计算器源码

十一、random

随机数

随机验证码实例:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: