zoukankan      html  css  js  c++  java
  • python 中 模块,包, 与常用模块

    一 模块

    模块:就是一组功能的集合体, 我们的程序可以直接导入模块来复用模块里的功能

    导入方式 一般为 : import 模块名

    在python中, 模块一般分为四个通用类别

    1使用python编写.py 文件
    
    2、已被编译为共享库或DLL 的c 或c++扩展
    
    3把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
    
    4、使用c编写并链接到python解释器的内置模块

    使用模块的优点:

    1、从文件级别组织程序, 更方便管理

    2、拿来主义, 提升开发效率

    二 使用模块 import

    导入模块 import

    1:语法: import 模块名

    2:在第一次导入模块时会做三件事,重复导入会直接引用内存中已经加载好的结果

    1、为源文件穿件新的名称空间, 
    2、在新建的名称空间中执行模块中包含的代码。
    3、创建名字(模块名)来引用该名称空间

    3:被导入的模块 有独立的名称空间

    每个模块都是一个独立的名称空间, 定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间, 这样我们在编写自己的模块时, 就不用担心我们定义在自己模块中全局变量会被导入时 , 与使用者的全局变量冲突。

    4 为模块名起别名

    为依据导入的模块起别人的方式对编写可扩展的代码很有用

    import span as sm

    5 在一行中导入多个模块   模块名中间用 “,” 分隔

    import sys,os,re

    三 使用模块 form.....import

    1、from...import 的使用

    1 from 模块名 import  要读的read1,read2

    2 、import  和from ....import   的对比

    唯一区别就是:使用from。。import... 则是将spam 中的名字直接导入到当前的名称空间中, 所有在当前名称空间中, 直接使用名字就可以了, 无需加前缀 模块名
    
    
    优点:使用起来方便了
    缺点:容易与当前执行文件中的名字冲突

    3、也支持重命名 as

     from spam import read1 as read

    4、一行导入多个名字

    from spam import read1,read2,money

    5、 导入所有   from。。。。import *

    #from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置

    四:py 文件区分两种用途:模块与脚本

    编写好的一个python文件 可以有两种途径:
    
    一:脚本,一个文件就是整个程序,用来被执行
    二 :模块,文件中存放着一堆功能,用来呗导入使用
    
    
    #python为我们内置了全局变量__name__,
        当文件被当做脚本执行时:__name__ 等于'__main__'
        当文件被当做模块导入时:__name__等于模块名
    
    
    #作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
        if __name__ == '__main__':

    五:模块的搜索路径

    模块的查找顺序:内存中已经加载的模块-->内置模块---->sys.path路径中包含的模块

    包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来

    需要强调的是:

    1、在python3中,即使包下没有__init__.py 文件,import包仍然不会报错,而python2中若是没有的话, 就会报错

    2、创建包的目的不是为了运行, 而是被导入使用, 记住,包只是模块的一种形式而已,包的本质就是一种模块

    一、包的使用之import

    1 import glance.db.models
    2 glance.db.models.register_models('mysql') 

    二:包的使用之 from。。。import。。。

    1 from glance.db import models

    强调:

    1、在导入时带点,  点的左边必须是一个包, 这是导入包特有的语法
    2、包内, 模块直接的导入应该使用from。。。import。。。
    3from。。。import。。。。 import后必须是一个明确的名字, 没有任何的前缀。
    
    
    
    
    from a.b.c.f  import g.h.x    # 这是错误的
    
    #f 的左边必须是包
    import后的名字不能有任何的前缀, 不能有 .

    常用模块

    一、time和datetime 模块

    在python中通常有这几种方式来表达时间:

    1:时间戳(timestamp):通常来说, 时间戳表示的是从1970年1月1日 00:00:00 开始按照秒计算的偏移量

    2:格式化的时间字符串(Format String)

    3:结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

    二、random模块

     1 import random
     2  
     3 print(random.random())#(0,1)----float    大于0且小于1之间的小数
     4  
     5 print(random.randint(1,3))  #[1,3]    大于等于1且小于等于3之间的整数
     6  
     7 print(random.randrange(1,3)) #[1,3)    大于等于1且小于3之间的整数
     8  
     9 print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
    10  
    11 print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
    12  
    13 print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716 
    14  
    15  
    16 item=[1,3,5,7,9]
    17 random.shuffle(item) #打乱item的顺序,相当于"洗牌"
    18 print(item)

    三: os 模块

    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所指向的文件或者目录的最后修改时间
    os.path.getsize(path) 返回path的大小
    View Code

    os路径处理:

    推荐使用:

    import  os

    import os,sys
    possible_topdir = os.path.normpath(os.path.join(
        os.path.abspath(__file__),
        os.pardir, #上一级
        os.pardir,
        os.pardir
    ))
    sys.path.insert(0,possible_topdir)

    四: sys模块

    1 sys.argv           命令行参数List,第一个元素是程序本身路径
    2 sys.exit(n)        退出程序,正常退出时exit(0)
    3 sys.version        获取Python解释程序的版本信息
    4 sys.maxint         最大的Int值
    5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    6 sys.platform       返回操作系统平台名称

    五  序列化:json&pickle

    序列化:我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中pickling.

    序列化的优点

    1:持久保存状态

    2:跨平台数据交互  (其中pickle只能读取python文件,不能跨平台)

    import json
    import pickle

    注意:json 不认单引号,

    序列化:

    序列化:
    json。dumps(dic) 
    pickle.dumps(s)
    
    
    反序列化:
    json.loads()
    pickle.loads()

    六 hashlib 模块

    1:hash:一种算法, 该算法接受传入的内容,经过运算得到一串 hash值

    hash 值得特点是:

    #只要传入的内容是一样的 得到的hash值必然一样。 

    #不能由hash值返解成内容 ===》把密码做成hash值,不应该在网络传输明文密码

    #只要使用的hash算法不变, 无论小燕的内容多大, 得到的hash值长度是固定的

    # import hashlib
    #
    # m=hashlib.md5()
    # m.update('hello'.encode('utf-8'))
    # m.update('world'.encode('utf-8'))
    # m.update('egon'.encode('utf-8'))
    # print(m.hexdigest()) #3801fab9b8c8d9fcb481017969843ed5

    密码加盐

    import  hashlib
    pwd="alex12345"
    
    m=hashlib.me5()
    m.update("一行白鹭上青天")
    m.update(pwd.encode("utf-8"))
    print(m.hexdigest())

    七 re模块(正则)

    正则就是用一些具有特殊含义的符号组合到一起(正则表达式)来描述字符或者字符串的方法。或者说正则就是 用来描述一列事物的规则。

    在(python 它内嵌在python中, 并通过re模块来实现。

    二 常用匹配模式(元字符)

     =================================匹配模式=================================
    #一对一的匹配
    # 'hello'.replace(old,new)
    # 'hello'.find('pattern')
    
    #正则匹配
    import re
    #w与W
    print(re.findall('w','hello egon 123')) #['h', 'e', 'l', 'l', 'o', 'e', 'g', 'o', 'n', '1', '2', '3']
    print(re.findall('W','hello egon 123')) #[' ', ' ']
    
    #s与S
    print(re.findall('s','hello  egon  123')) #[' ', ' ', ' ', ' ']
    print(re.findall('S','hello  egon  123')) #['h', 'e', 'l', 'l', 'o', 'e', 'g', 'o', 'n', '1', '2', '3']
    
    #
     	都是空,都可以被s匹配
    print(re.findall('s','hello 
     egon 	 123')) #[' ', '
    ', ' ', ' ', '	', ' ']
    
    #
    与	
    print(re.findall(r'
    ','hello egon 
    123')) #['
    ']
    print(re.findall(r'	','hello egon	123')) #['
    ']
    
    #d与D
    print(re.findall('d','hello egon 123')) #['1', '2', '3']
    print(re.findall('D','hello egon 123')) #['h', 'e', 'l', 'l', 'o', ' ', 'e', 'g', 'o', 'n', ' ']
    
    #A与
    print(re.findall('Ahe','hello egon 123')) #['he'],A==>^
    print(re.findall('123','hello egon 123')) #['he'],==>$
    
    #^与$
    print(re.findall('^h','hello egon 123')) #['h']
    print(re.findall('3$','hello egon 123')) #['3']
    
    # 重复匹配:| . | * | ? | .* | .*? | + | {n,m} |
    #.
    print(re.findall('a.b','a1b')) #['a1b']
    print(re.findall('a.b','a1b a*b a b aaab')) #['a1b', 'a*b', 'a b', 'aab']
    print(re.findall('a.b','a
    b')) #[]
    print(re.findall('a.b','a
    b',re.S)) #['a
    b']
    print(re.findall('a.b','a
    b',re.DOTALL)) #['a
    b']同上一条意思一样
    
    #*
    print(re.findall('ab*','bbbbbbb')) #[]
    print(re.findall('ab*','a')) #['a']
    print(re.findall('ab*','abbbb')) #['abbbb']
    
    #?
    print(re.findall('ab?','a')) #['a']
    print(re.findall('ab?','abbb')) #['ab']
    #匹配所有包含小数在内的数字
    print(re.findall('d+.?d*',"asdfasdf123as1.13dfa12adsf1asdf3")) #['123', '1.13', '12', '1', '3']
    
    #.*默认为贪婪匹配
    print(re.findall('a.*b','a1b22222222b')) #['a1b22222222b']
    
    #.*?为非贪婪匹配:推荐使用
    print(re.findall('a.*?b','a1b22222222b')) #['a1b']
    
    #+
    print(re.findall('ab+','a')) #[]
    print(re.findall('ab+','abbb')) #['abbb']
    
    #{n,m}
    print(re.findall('ab{2}','abbb')) #['abb']
    print(re.findall('ab{2,4}','abbb')) #['abb']
    print(re.findall('ab{1,}','abbb')) #'ab{1,}' ===> 'ab+'
    print(re.findall('ab{0,}','abbb')) #'ab{0,}' ===> 'ab*'
    
    #[]
    print(re.findall('a[1*-]b','a1b a*b a-b')) #[]内的都为普通字符了,且如果-没有被转意的话,应该放到[]的开头或结尾
    print(re.findall('a[^1*-]b','a1b a*b a-b a=b')) #[]内的^代表的意思是取反,所以结果为['a=b']
    print(re.findall('a[0-9]b','a1b a*b a-b a=b')) #[]内的^代表的意思是取反,所以结果为['a=b']
    print(re.findall('a[a-z]b','a1b a*b a-b a=b aeb')) #[]内的^代表的意思是取反,所以结果为['a=b']
    print(re.findall('a[a-zA-Z]b','a1b a*b a-b a=b aeb aEb')) #[]内的^代表的意思是取反,所以结果为['a=b']
    
    ## print(re.findall('a\c','ac')) #对于正则来说a\c确实可以匹配到ac,但是在python解释器读取a\c时,会发生转义,然后交给re去执行,所以抛出异常
    print(re.findall(r'a\c','ac')) #r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义
    print(re.findall('a\\c','ac')) #同上面的意思一样,和上面的结果一样都是['a\c']
    
    #():分组
    print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab']
    print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab
    print(re.findall('(?:ab)+123','ababab123')) #findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容
    print(re.findall('href="(.*?)"','<a href="http://www.baidu.com">点击</a>'))#['http://www.baidu.com']
    print(re.findall('href="(?:.*?)"','<a href="http://www.baidu.com">点击</a>'))#['href="http://www.baidu.com"']
    
    #|
    print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
    View Code
  • 相关阅读:
    如何:为 Silverlight 客户端生成双工服务
    Microsoft Sync Framework 2.1 软件开发包 (SDK)
    Windows 下的安装phpMoAdmin
    asp.net安全检测工具 Padding Oracle 检测
    HTTP Basic Authentication for RESTFul Service
    Windows系统性能分析
    Windows Server AppFabric Management Pack for Operations Manager 2007
    Mongo Database 性能优化
    服务器未能识别 HTTP 标头 SOAPAction 的值
    TCP WAIT状态及其对繁忙的服务器的影响
  • 原文地址:https://www.cnblogs.com/lx3822/p/9141512.html
Copyright © 2011-2022 走看看