模块一

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将正则表达式编译成为一个正则表达式对象,节省时间

以上是关于模块一的主要内容,如果未能解决你的问题,请参考以下文章

模块一(re模块)

一,模块,模块导入

random模块 时间模块 sys模块 os模块 json模块 pickle模块

常用模块一(os模块序列化模块(json,pickle))

常用模块一

python常用模块一