Python天天学_05_模块
Python_day_05
金角大王: http://www.cnblogs.com/alex3714/articles/5161349.html
------Python是一个优雅的大姐姐
学习方式:通过老师的视频以及博客上面文档,以完成作业和知识点归纳的方式编写自己博客。
本节内容(尽量重点标记出来,这一节知识很多很难记)
模块介绍
模块一共三种:
l python标准库
l 第三方模块
l 应用程序自定义模块
模块导入方法
- import 语句
- from…import 语句
- From…import* 语句
包(package)
如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。
请注意,每一个包目录下面都会有一个__init__.py
的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。__init__.py
可以是空文件,也可以有Python代码,因为__init__.py
本身就是一个模块,而它的模块名就是对应包的名字。调用包就是执行包下的__init__.py文件
模块之间相互调用
模块之间的相互调用需要更改路径:
A) 获取文件相对路径(以绝对路径显示)
print(os.path.abspath(__file__))
#C:\Users\Administrator.WIN-6OTFE0NIBU4\PycharmProjects\ATM\bin\bin.py
B) 向上延伸至ATM路径(基本路径)中
BASE_DIR =
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#
C:\Users\Administrator.WIN-6OTFE0NIBU4\PycharmProjects\ATM
print(BASE_DIR)
C) 通过sys模块添加路径,完成路径调用
import os,sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
__name__变量使用
__name__在当前文件中调用为:__main__
在其他文件中调用为:name所在文件的模块名。
一、time模块
time() -- return current time in seconds since the Epoch as a float
clock() -- return CPU time since process start as a float
sleep() -- delay for a number of seconds given as a float
gmtime() -- convert seconds since Epoch to UTC tuple
localtime() -- convert seconds since Epoch to local time tuple
asctime() -- convert time tuple to string
ctime() -- convert time in seconds to string
mktime() -- convert local time tuple to seconds since Epoch
strftime() -- convert time tuple to string according to format specification
strptime() -- parse string to time tuple according to format specification
tzset() -- change the local timezone
二、random模块
三、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分割成目录和文件名二元组返回
# 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所指向的文件或者目录的最后修改时间
四、sys模块
1.sys.argv
命令行参数List,第一个元素是程序本身路径
# ['C:/Users/Administrator.WIN-6OTFE0NIBU4/PycharmProjects/s14/day5/sys.py']
2.sys.path
返回模块的搜索路径
# ['C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\PycharmProjects\\s14\\day5',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\PycharmProjects\\s14',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\PycharmProjects\\s14\\venv\\Scripts\\python36.zip',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\PycharmProjects\\s14\\venv\\DLLs',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\PycharmProjects\\s14\\venv\\lib',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\PycharmProjects\\s14\\venv\\Scripts',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\AppData\\Local\\Programs\\Python\\Python36-32\\Lib',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\PycharmProjects\\s14\\venv',
# 'C:\\Users\\Administrator.WIN-6OTFE0NIBU4\\PycharmProjects\\s14\\venv\\lib\\site-packages',
# 'C:\\Program Files\\JetBrains\\PyCharm 2017.3.3\\helpers\\pycharm_matplotlib_backend']
3.sys.platform
#返回操作系统平台名称
# win32
五、hashlib模块
用于加密相关的操作,3.x里主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
六、logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志。
1.简单运用
logging的日志可以分为 debug() , info(), warning(), error() and critical() 5个级别
可见,默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET),默认的日志格式为日志级别:Logger名称:用户输出消息。
2. 灵活配置日志级别,日志格式,输出位置
test.log文档
可见在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
A) filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
B) filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
C) format:指定handler使用的日志显示格式。
D) datefmt:指定日期时间格式。
E) level:设置rootlogger(后边会讲解具体概念)的日志级别
F) stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open('test.log','w')),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
format参数中可能用到的格式化串:
l %(name)s Logger的名字
l %(levelno)s 数字形式的日志级别
l %(levelname)s 文本形式的日志级别
l %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
l %(filename)s 调用日志输出函数的模块的文件名
l %(module)s 调用日志输出函数的模块名
l %(funcName)s 调用日志输出函数的函数名
l %(lineno)d 调用日志输出函数的语句所在的代码行
l %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
l %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
l %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
l %(thread)d 线程ID。可能没有
l %(threadName)s 线程名。可能没有
l %(process)d 进程ID。可能没有
l %(message)s用户输出的消息
3.logger
test.log文档
七、configparser模块
基本的创建方法
文件内容:
基本查找方法:
查找方法(还有三个):
增,删,改操作:
文件内容:
八、re模块(正则表达式)
就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
字符匹配(普通字符,元字符):
普通字符:大多数字符和字母都会和自身匹配
>>> re.findall('alvin','yuanaleSxalexwupeiqi')
['alvin']
元字符:. ^ $ * + ? { } [ ] | ( ) \
十一个元字符的用法
. ^ $ * + ? { }用法
.:代替一个字符匹配
^:从开头进行匹配
$:从结尾进行匹配
*:前一个元素出现[0,正无穷)个
+:前一个元素出现[1,正无穷)个
?:前一个元素出现[0,1]个
{a,b}:前一个元素出现[a,b]个
[ ] | ( ) \用法
元字符之字符集[]:
# 在字符集里有功能的符号: - ^ \
元字符之转义符\
反斜杠后边跟元字符去除特殊功能,比如\.
反斜杠后边跟普通字符实现特殊功能,比如\d
\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格 ,&,#等
元字符之分组()
元字符之|
‘或’的作用
re模块下的常用方法
六个主要使用的方法
九、josn和pickle模块
什么是序列化?
我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpicklin
序列化操作(dumps方法)
反序列化操作(loads方法)
十、shelve模块
Shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型
存文件三个操作:
会产生三个文件!!
读文件操作