模块一

模块

模块..................................................................................................................................... 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下为" ",Linux下为" "

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个字符

入门到精通

基础

• '00d' 可以匹配 '007' ,但无法匹配 '00A' ;
• 'ddd' 可以匹配 '010' ;
• 'wwd' 可以匹配 'py3' ;
. 可以匹配任意字符,所以:
• 'py.' 可以匹配 'pya' 、 'pyb' 、 'py!' 等等。
要匹配变长的字符,在正则表达式中,用 * 表示任意个字符(包括0个),用 + 表示至少一个字符,用 ? 表示0个或1个字符,用 {n} 表示n个字符,用 {n,m} 表示n-m个字符:(• '00d' 可以匹配 '007' ,但无法匹配 '00A' ;, • 'ddd' 可以匹配 '010' ;, • 'wwd' 可以匹配 '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将正则表达式编译成为一个正则表达式对象,节省时间

原文地址:https://www.cnblogs.com/changwentao/p/9073739.html