一、模块(modue)的概念
在Python中,一个.py文件就称之为一个模块(Module)
模块一共三种:
1.python标准库
2.第三方模块
3.自定义模块
二、模块导入
被导入的模块,需与当前文件处于同一个文件夹下,才可使用相对路径导入,否则报错
(sys.path存储了当前文件的路径以及标准库模块的路径)
1、import
module1[, module2[,... moduleN]
import test
实质是:先得到test------>与path中的环境变量组成一个绝对路径------>导入文件内容------>执行文件全部内容
2、from
modname
import
name1[, name2[, ... nameN]]
from test import add
从模块中导入部分函数
from dict1 import test
从文件夹dict1中导入test.py文件
实质是:先得到dict1 est.py------>与path中的环境变量组成一个绝对路径------>导入文件内容------>执行文件全部内容
3、from
modname
import
*
导入模块中所有函数,但须注意,导入的函数如果和当前文件中的函数有重名现象,其中一个会被覆盖掉,先定义的被覆盖掉
请注意,每一个包目录下面都会有一个__init__.py
的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。
__init__.py
可以是空文件,也可以有Python代码,因为__init__.py
本身就是一个模块,而它的模块名就是对应包的名字
调用包就是执行包下的__init__.py文件
无论1还是2,首先通过sys.path找到test.py,然后执行test脚本(全部执行),区别是1会将test这个变量名加载到名字空间,而2只会将add这个变量名加载进来
三、time模块
1、 三种时间表示:
- 时间戳(timestamp) : 时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。运行“type(time.time())”,返回的是float类型。
- 格式化的时间字符串
- 元组(struct_time) : struct_time元组共有9个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
import time time.time() #时间戳1473525444.037215 time.localtime() #struct_time gmtime() #将一个时间戳转换为UTC时区(0时区)的struct_time
四、random模块
random.random()
#(0,1)----float
random.randint(
1
,
3
)
#[1,3]----int
random.randrange(
1
,
3
)
#[1,3)
random.choice([
1
,
'23'
,[
4
,
5
]])
#N选一
random.sample([
1
,
'23'
,[
4
,
5
]],
2
)
#N选二
random.uniform(
1
,
3
)
#1和3之间浮点型数据
random.shuffle(item) #打乱item元素的顺序
#练习~四位验证码 import random def aaa(): rec='' for i in range(4): a=random.randint(0,9) b=chr(random.randint(65,90)) c=chr(random.randint(97,122)) rec+=str(random.choice([a,b,c])) print(rec) aaa()
五、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下为" ",Linux下为" " os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: 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模块
sys.argv 命令行参数
List
,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(
0
)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的
Int
值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
#进度条 import sys,time for i in range(10): sys.stdout.write('#') time.sleep(1) sys.stdout.flush()
七、re模块
1. 元字符
. 匹配任意字符,除了换行符
^ 匹配字符串的开头
$ 匹配字符串的末尾
* 匹配0个或多个的表达式
+ 匹配1个或多个的表达式
? 转为非贪婪模式
e{ n} 匹配n个前面表达式
e{ n,} 匹配n或无穷个前面表达式
e{ n, m} 匹配n到m个前面表达式
| 或
w 匹配数字字母下划线
W 匹配非数字字母下划线
s 匹配任意空白字符,等价于 [ f]
S 匹配任意非空字符
d 匹配任意数字
D 匹配任意非数字
匹配一个单词边界,也就是指单词和空格间的位置
import re ret=re.findall('cl','abcle') print(ret) #[] ret=re.findall('c\l','abcle') print(ret) #[] ret=re.findall('c\\l','abcle') print(ret) #['c\l'] ret=re.findall(r'c\l','abcle') print(ret) #['c\l']
因为表达式为'c\\l'时,先传给python解释器,解释器得到‘c\l’,再将‘c\l’传给re解释器,解释器得到‘cl’
r'c\l'表示传给re解释器的就是‘c\l’
2. 元字符之分组
ret=re.search('(?P<id>d{2})/(?P<name>w{3})','23/com') print(ret.group()) #23/com print(ret.group('id')) #23
3. re模块常用方法
findall( ) 返回所有满足匹配条件的结果,放在列表里
search( ) 在字符串内查找匹配,只找到第一个匹配的对象,该对象可
以
通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None
match( ) 同search,但只在字符串开始处进行匹配
split('[ab]','abcd') 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
aaa=re.split('[ab]','abdfeaabcc') print(aaa) #['','','dfe','','','cc']
sub('d','aaa','sgee43jisg55',2) 将字符串中的数字替换为aaa,且替换2次 #sgeeaaaaaajisg55
compile函数:
用于编辑正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用
pattern = re.compile(r'd+') #将正则表达式赋值给变量,方便后续重复使用 m = pattern.match('one12twothree34four') m = pattern.match('one123456786666e34four', 2, 10) # 从‘e’的位置开始匹配匹配到8结束,没有匹配 m=pattern.match('sds128545585sgegsgegw',3,6) #从1匹配到8 #<_sre.SRE_Match object; span=<3,6>,match='128'>
finditer() 字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回
import re it = re.finditer(r"d+","12a32bc43jf3") for match in it: print (match.group() ) #12 #32 #43 #3