之前有小伙伴留言分享,希望可以更新写关于Python OS模块和SYS模块方面的文章,今天小七特地给大家整理了下噢,有需要的建议可以收藏起来喔~ 1 一、模块介绍 1. 定义: 模块:本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test) 用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 2. 语法: · import 语句 当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。 导入模块: 1、 import module1[, module2[,... moduleN] 调用符号:. 1、import os 2、print(os.sep) 3、print(os.getcwd()) · From…import 语句 Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下: 1、from modname import name1[, name2[, ... nameN]] From…import* 语句 把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明: 1、from modname import * 这提供了一个简单的方法来导入一个模块中的所有项目。慎用 from…import *。 · import 和 from 的区别: import导入使用时,加前缀 module.func()。相当于把模块代码放在当前文件中执行一遍。 from可以指定需要的函数或变量导入。 导入模块和当前py文件都有同一个函数,调用会调用哪一个? 因为python是解释型,所以后面覆盖前面。 · from … import … as … 3. import本质 import 本质: 导入一个模块本质就是解释执行一个python文件 导入一个包本质就是解释该包下的__init__.py文件 1、module = all_code(所有代码) 2、import :本质把模块所有代码解释一遍,复制给模块名 3、from module import name :把这个模块的代码把哪一部分给解释了,赋值给name · __init__.py 包:本质就是一个目录(必须带有一个__init__.py文件),用来从逻辑上组织模块 导入包,怎么导入? 导入包的本质:执行包下面的__init__.py文件 导入包下的模块 包下面的模块,这样调用是错误的 在__init__.py内容中导入模块 1、from . import module 2、# '.' 指的相对路径,指的谁的相对路径?__init__.py的相对路径还是调用init的那个模块的 3、指的是__init__.py的相对路径。 4、路径搜索和搜索路径 上面提到的都是导入同级目录下的模块,如果不在同一个目录下: import module_name实际找module_name.py文件,是文件就一定要有路径。 导入模块就是:找到.py文件的位置,把它执行一遍,从哪里找呢?sys.path. 1、>>> import sys 2、 >>> sys.path['', 3、'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\python35.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35\\lib\\site-packages'] 1、sys.path.append() :追加到最后 2、# 所以:可以如下,动态添加路径到第一 3、sys.path.insert 5. 导入优化 1、import module_test 2、# import导入情况,如果重复调用,python就会重复找,避免重复找,可以用from方式导入 3、from module_test import test 6. 阻止属性导入 如果你不想让某个模块属性被 “from module import *” 导入 , 那么你可以给你不想导入的属性名称加上一个下划线( _ )。 不过如果你导入了整个模块或是你显式地导入某个属性这个隐藏数据的方法就不起作用了。 02 二、模块的分类 a:标准库 b:开源模块-第三方模块 c:自定义模块 03 三、常用内置模块 1、os模块 用于提供系统级别的操作 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir('dirname') 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename('oldname','newname') 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为'\\',Linux下为'/' os.linesep 输出当前平台使用的行终止符,win下为'\t\n',Linux下为'\n' os.pathsep 输出用于分割文件路径的字符串os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system('bash command') 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回,它仅仅是以 'PATH' 中最后一个 '/' 作为分隔符,分隔后,将索引为0的视为目录(路径),将索引为1的视为文件名 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 2、time和datetime 在Python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元组(struct_time)共九个元素。 由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。 UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。 元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。 1、time.time() # 获取时间戳:当前时间减1970-1-1 00:00 ==> 秒>>> time.localtime() # 本地时间,元组方式(tm_isdst() 是否夏令时)time.struct_time(tm_year=2016, tm_mon=8, tm_mday=29, tm_hour=θ, tm_min=51, tm_sec=37, tm_wday=θ, tm_yday=242, tm_isdst=θ) 2、help(time) # 模块帮助>>> time.timezone # 查看时区-28800 # 28800/60秒/60分 = 8时 ==> utc --> 标准+8 3、time.sleep() # 时间睡几秒time.gmtime() # 不加时间戳,为国际标准时间time.localtime() # 不加时间戳,本地时间# 加上则从1970年开始算。 · 时间转为时间戳 1、>>> x = time.localtime() 2、 >>> x 3、time.struct_time(tm_year=2016, tm_mon=8, tm_mday=29, tm_hour=1, tm_min=θ, tm_sec=8, tm_wday=θ, tm_yday=242, tm_isdst=θ) 4、>>> time.mktime(x) 5、1472403608.θ · 格式化时间字符串 1、>>> time.strftime('%Y-%m-%d %X',x)'/2、2016-08-29 01:00:08' 3、>>> time.strptime('2016-08-29 01:00:08','%Y-%m-%d %X') 4、time.struct_time(tm_year=2016, tm_mon=8, tm_mday=29, tm_hour=1, tm_min=0, tm_sec=8, tm_wday=0, tm_yday=242, tm_isdst=-1) 5、 6、strftime('格式',struct_time) --> '格式化字符串' 7、strptime('格式化字符串','格式') --> 'struct_time' · 转化时间戳和元组到时间字符串 1、>>> time.asctime(time.localtime()) # tuple -> string' 2、Mon Aug 29 01:10:47 2016' 3、>>> time.ctime(888888888) # seconds -> string' 4、Tue Mar 3 09:34:48 1998' · 时间加减 1、import datetime 2、 3、datetime.datetime.now() # 返回 2016-08-19 12:47:03.941925 4、datetime.date.fromtimestamp(time.time()) # 时间戳直接转成日期格式 2016-08-19 5、 6、datetime.datetime.now() + datetime.timedelta(3) # 当前时间+3天 7、datetime.datetime.now() + datetime.timedelta(-3) # 当前时间-3天 8、datetime.datetime.now() + datetime.timedelta(hours=3) # 当前时间+3小时 9、datetime.datetime.now() + datetime.timedelta(minutes=30) # 当前时间+30分 3、random模块 1、random.random() # 0~1之间的随机 2、random.randint(1,3) # [1,2,3] 3、random.randrange(3) #[0,1,2] 4、 5、random.choice('hello') # 传入序列随机字 6、random.sample('hello',2) # 随机两个字母 7、random.uniform(1,3) # 1~3直接随机 8、a = [1,2,3,4,5] 9、random.shuffle(a) # 洗牌,打乱 10、 11、importstring 12、''.join(random.sample(string.hexdigits,4)) # 随机4位验证码 4、sys模块 5、shutil模块 高级的 文件、文件夹、拷贝、压缩包等 处理模块 6、ConfigParser 用于对特定的配置进行操作,当前模块的名称在 python 3.x 版本中变更为 configparser。 来看一个好多软件的常见文档格式如下 如果想用python生成一个这样的文档怎么做呢? · 生成 · 读取出来 · configparser增删改查语法 7、hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,hash 加密都是bytes类型 python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密 8、Subprocess模块 调用subprocess.run(…)是推荐的常用方法,在大多数情况下能满足需求,但如果你可能需要进行一些复杂的与系统的交互的话,你还可以用subprocess.Popen(),语法如下: 1、p = subprocess.Popen('find / -size +1000000 -exec ls -shl {} \;',shell=True,stdout=subprocess.PIPE) 2、print(p.stdout.read()) 可用参数: args:shell命令,可以是字符串或者序列类型(如:list,元组) bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 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 需要交互的命令示例 9、re-正则表达式模块 常用正则表达式符号 最常用的匹配语法 分组匹配 和 group()、groups()、groupdict() 10、logging模块 python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用。 最简单用法 看一下这几个日志级别分别代表什么意思 如果想把日志写到文件里,也很简单 其中下面这句中的level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,在这个例子, 第一条日志是不会被纪录的,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。 如果想同时把log打印在屏幕和文件日志里,就需要了解一点复杂的知识 了 11、json和pickle数据序列化 str eval 数据序列化 json只能处理简单的,所有语言通用的,函数不能json序列化 pickle可以序列化python所有的数据类型 12、shelve 模块 shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式 13、xml处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,json之前的交换方式 参考文档: http://www.cnblogs.com/alex3714/articles/5161349.html 14、PyYAML模块 Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块,参考文档: http:///wiki/PyYAMLDocumentation |
|
来自: 首家i55ryzehof > 《上网》