八、模块和包

一、模块(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
原文地址:https://www.cnblogs.com/haoy/p/10314465.html