模块一
Posted 美丑有命,胖瘦在天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块一相关的知识,希望对你有一定的参考价值。
模块
模块..................................................................................................................................... 1
1. os模块......................................................................................................................... 2
2. sys模块........................................................................................................................ 4
3. time模块..................................................................................................................... 5
4. random模块................................................................................................................ 9
5. 序列化模块................................................................................................................ 12
6. collections模块......................................................................................................... 14
7. re模块....................................................................................................................... 16
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 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->\'nt\'; Linux->\'posix\'
os.system("bash command") 运行shell命令,直接显示
os.popen("bash command).read() 运行shell命令,获取执行结果
os.environ 获取系统环境变量
os.path
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所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
\'\'\'
os模块是与操作系统交互的一个接口
os.stat(\'path/filename\') 获取文件/目录信息 的结构说明
stat 结构:
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
stat 结构
2. sys模块
sys模块是与python解释器交互的一个接口
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取Python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
异常处理和status
import sys
try:
sys.exit(1)
except SystemExit as e:
print(e)
3. time模块
常用方法
time.sleep(secs)
(线程)推迟指定的时间运行。单位为秒。
time.time()
获取当前时间戳
表示时间的三种方式
时间戳
通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
元组(struct_time)
struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
格式化的时间字符串
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
python中时间日期格式化符号:
时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
几种格式之间的转换
重点代码
计算时间差
import time
true_time=time.mktime(time.strptime(\'2017-09-11 08:30:00\',\'%Y-%m-%d %H:%M:%S\'))
time_now=time.mktime(time.strptime(\'2017-09-12 11:00:00\',\'%Y-%m-%d %H:%M:%S\'))
dif_time=time_now-true_time
struct_time=time.gmtime(dif_time)
print(\'过去了%d年%d月%d天%d小时%d分钟%d秒\'%(struct_time.tm_year-1970,struct_time.tm_mon-1,
struct_time.tm_mday-1,struct_time.tm_hour,
struct_time.tm_min,struct_time.tm_sec))
计算时间差
4. random模块
#随机小数
random.random() # 大于0且小于1之间的小数
random.uniform(1,3) #大于1小于3的小数
#随机整数
>>> random.randint(1,5) # 大于等于1且小于等于5之间的整数
>>> random.randrange(1,10,2) # 大于等于1且小于10之间的奇数
#随机选择一个返回
random.choice([1,\'23\',[4,5]]) # #1或者23或者[4,5]
#随机选择多个返回,返回的个数为函数的第二个参数
random.sample([1,\'23\',[4,5]],2) # #列表元素任意2个组合
#打乱列表顺序
random.shuffle(item) # 打乱次序
重点代码生成随机验证码
import random
def v_code():
code = \'\'
for i in range(5):
num=random.randint(0,9)
alf=chr(random.randint(65,90))
add=random.choice([num,alf])
code="".join([code,str(add)])
return code
print(v_code())
生成验证码
5. 序列化模块
将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。
序列化的目的
1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。
Json模块提供了四个功能:dumps、dump、loads、load
import json
dic = {\'k1\':\'v1\',\'k2\':\'v2\',\'k3\':\'v3\'}
str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串
print(type(str_dic),str_dic) #<class \'str\'> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json转换完的字符串类型的字典中的字符串是由""表示的
dic2 = json.loads(str_dic) #反序列化:将一个字符串格式的字典转换成一个字典
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(type(dic2),dic2) #<class \'dict\'> {\'k1\': \'v1\', \'k2\': \'v2\', \'k3\': \'v3\'}
list_dic = [1,[\'a\',\'b\',\'c\'],3,{\'k1\':\'v1\',\'k2\':\'v2\'}]
str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型
print(type(str_dic),str_dic) #<class \'str\'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class \'list\'> [1, [\'a\', \'b\', \'c\'], 3, {\'k1\': \'v1\', \'k2\': \'v2\'}]
loads和dumps
import json
f = open(\'json_file\',\'w\')
dic = {\'k1\':\'v1\',\'k2\':\'v2\',\'k3\':\'v3\'}
json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
f.close()
f = open(\'json_file\')
dic2 = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
f.close()
print(type(dic2),dic2)
load和dump
json & pickle 模块
json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换
6. collections模块
扩展的数据类型
namedtuple
生成可以使用名字来访问元素内容的tuple
queue
先进先出
deque
双向队列
双端队列,可以快速的从另外一侧追加和推出对象
defaultdict
有序字典
OrderedDict
带有默认值的字典
Counter
计数器,主要用来计数
7. re模块
正则表达式
常用匹配符
\\d+ 可以匹配多个数字
\\d+? 可以匹配一部分数字(一组)
^ 匹配行首
$ 匹配行尾
^\\d 第一个必须为数字
\\d$ 最后一个必须为数字
\\s 匹配一个空格
\\d{3,8} 匹配3-8个数字
[0-9a-zA-Z\\_] 可以匹配一个数字、字母或者下划线;
[0-9a-zA-Z\\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串,比如\'a100\',\'0_Z\',\'Py3000\'等等;
[a-zA-Z\\_][0-9a-zA-Z\\_]* 可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
[a-zA-Z\\_][0-9a-zA-Z\\_]{0, 19} 更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
. 匹配任意个字符
* 匹配任意个字符(包括0个)
? 匹配0个或1个字符
+ 匹配至少一个字符
{n} n个字符
{n,m} n-m个字符
入门到精通
基础
• \'00\\d\' 可以匹配 \'007\' ,但无法匹配 \'00A\' ;
• \'\\d\\d\\d\' 可以匹配 \'010\' ;
• \'\\w\\w\\d\' 可以匹配 \'py3\' ;
. 可以匹配任意字符,所以:
• \'py.\' 可以匹配 \'pya\' 、 \'pyb\' 、 \'py!\' 等等。
要匹配变长的字符,在正则表达式中,用 * 表示任意个字符(包括0个),用 + 表示至少一个字符,用 ? 表示0个或1个字符,用 {n} 表示n个字符,用 {n,m} 表示n-m个字符:(• \'00\\d\' 可以匹配 \'007\' ,但无法匹配 \'00A\' ;, • \'\\d\\d\\d\' 可以匹配 \'010\' ;, • \'\\w\\w\\d\' 可以匹配 \'py3\' ;, . 可以匹配任意字符,所以: , • \'py.\' 可以匹配 \'pya\' 、 \'pyb\' 、 \'py!\' 等等。 )
强化
• [0-9a-zA-Z\\_] 可以匹配一个数字、字母或者下划线;
• [0-9a-zA-Z\\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串,比如 \'a100\' , \'0_Z\' , \'Py3000\' 等等;
• [a-zA-Z\\_][0-9a-zA-Z\\_]* 可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
• [a-zA-Z\\_][0-9a-zA-Z\\_]{0, 19} 更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
A|B 可以匹配A或B,所以 (P|p)ython 可以匹配 \'Python\' 或者 \'python\' 。
^ 表示行的开头, ^\\d 表示必须以数字开头。
$ 表示行的结束, \\d$ 表示必须以数字结束。
要做更精确地匹配,可以用 [] 表示范围(• [0-9a-zA-Z\\_] 可以匹配一个数字、字母或者下划线;, • [0-9a-zA-Z\\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串,比如 \'a100\' , \'0_Z\' , \'Py3000\' 等等;, • [a-zA-Z\\_][0-9a-zA-Z\\_]* 可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;, • [a-zA-Z\\_][0-9a-zA-Z\\_]{0, 19} 更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。, A|B 可以匹配A或B,所以 (P|p)ython 可以匹配 \'Python\' 或者 \'python\' 。, ^ 表示行的开头, ^\\d 表示必须以数字开头。, $ 表示行的结束, \\d$ 表示必须以数字结束。)
re模块
强烈建议使用Python的 r 前缀,就不用考虑转义的问题了
match() 方法判断是否匹配,如果匹配成功,返回一个 Match 对象,否则返回 None
切分字符串
用正则表达式切分字符串比用固定的字符更灵活
分组
正则表达式还有提取子串的强大功能。用 () 表示的就是要提取的分组(Group)
贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符
由于\\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。
必须让 \\d+ 采用非贪婪匹配(也就是尽可能少匹配),才能把后面的 0 匹配出来,加个 ? 就可以让 \\d+ 采用非贪婪匹配:
编译
在Python中使用正则表达式时,re模块内部会干两件事情
1.编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
2.用编译后的正则表达式去匹配字符串。
编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串。
search 找到一个就返回,最多只匹配一个。findAll可返回多个、match的话从第一个个字符开始匹配,search则是全文
finditer返回一个存放匹配结果的迭代器,节省空间;compile将正则表达式编译成为一个正则表达式对象,节省时间
以上是关于模块一的主要内容,如果未能解决你的问题,请参考以下文章