Python常用模块 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    Python模块

    模块是Python最高级别的程序组织单元,他将程序代码和数据封装起来以便重用,

Python常用模块

    实际来看模块往往对应Python程序文件。本质就是用一些代码实现某些功能的集合

    这个集合可以是一个.py文件,也可以是一个包(一个文件夹中,有一个.py入口文件)

    一、导入模块

    import module

    from module.xx import xx

    from module.xx import xx as rename

    from module.xx import *

    导入一个py文件,解释器解释该文件

    导入一个包

    导入模块根据路径 sys.path如果有该路径,就可直接导入

    如果sys.path么有想要的路径,通过sys.path.append('路径')

    二、开源模块

    下载安装

    1、yum、pip、apt-get

    2、源码编译安装:Python setup.py build Python setup install

    三、常用模块

    1、os模块#用作系统级别的工作

    os.popen('id').read()   # 执行系统命令得到返回结果

    os.system()        # 得到返回状态 返回无法截取

    os.name          # 返回系统平台 Linux/Unix用户是'posix'

    os.getenv()        # 读取环境变量

    os.putenv()        # 设置环境变量

    os.getcwd()        # 当前工作路径

    os.chdir()        # 改变当前工作目录

    os.walk('/root/')     # 递归路径

    文件处理

    mkfifo()/mknod()   # 创建命名管道/创建文件系统节点

    remove()/unlink()   # 删除文件

    rename()/renames()  # 重命名文件

    *stat()        # 返回文件信息

    symlink()       # 创建符号链接

    utime()        # 更新时间戳

    tmpfile()       # 创建并打开('w+b')一个新的临时文件

    walk()        # 遍历目录树下的所有文件名

    目录/文件夹

    chdir()/fchdir()   # 改变当前工作目录/通过一个文件描述符改变当前工作目录

    chroot()       # 改变当前进程的根目录

    listdir()       # 列出指定目录的文件

    getcwd()/getcwdu()  # 返回当前工作目录/功能相同,但返回一个unicode对象

    mkdir()/makedirs()  # 创建目录/创建多层目录

    rmdir()/removedirs() # 删除目录/删除多层目录

    访问/权限

    saccess()       # 检验权限模式

    chmod()        # 改变权限模式

    chown()/lchown()   # 改变owner和groupID功能相同,但不会跟踪链接

    umask()        # 设置默认权限模式

    文件描述符操作

    open()        # 底层的操作系统open(对于稳健,使用标准的内建open()函数)

    read()/write()    # 根据文件描述符读取/写入数据 按大小读取文件部分内容

    dup()/dup2()     # 复制文件描述符号/功能相同,但是复制到另一个文件描述符

    设备号

    makedev()       # 从major和minor设备号创建一个原始设备号

    major()/minor()    # 从原始设备号获得major/minor设备号

    os.path模块

    os.path.expanduser('~/.ssh/key') # 家目录下文件的全路径

    分隔

    os.path.basename()    # 去掉目录路径,返回文件名

    os.path.dirname()     # 去掉文件名,返回目录路径

    os.path.join()      # 将分离的各部分组合成一个路径名

    os.path.spllt()      # 返回(dirname(),basename())元组

    os.path.splitdrive()   # 返回(drivename,pathname)元组

    os.path.splitext()    # 返回(filename,extension)元组

    信息

    os.path.getatime()    # 返回最近访问时间

    os.path.getctime()    # 返回文件创建时间

    os.path.getmtime()    # 返回最近文件修改时间

    os.path.getsize()     # 返回文件大小(字节)

    查询

    os.path.exists()     # 指定路径(文件或目录)是否存在

    os.path.isabs()     # 指定路径是否为绝对路径

    os.path.isdir()     # 指定路径是否存在且为一个目录

    os.path.isfile()     # 指定路径是否存在且为一个文件

    os.path.islink()     # 指定路径是否存在且为一个符号链接

    os.path.ismount()    # 指定路径是否存在且为一个挂载点

    os.path.samefile()    # 两个路径名是否指向同一个文件

    2、sys模块#提供解释器相关操作

    sys.argv       # 命令行参数List,第一个元素是程序本身路径

    sys.exit(2)     # 退出脚本返回状态 会被try截取

    sys.exc_info()    # 获取当前正在处理的异常类

    sys.version     # 获取Python解释程序的版本信息

    sys.maxint      # 最大的Int值 9223372036854775807

    sys.maxunicode    # 最大的Unicode值

    sys.modules     # 返回系统导入的模块字段,key是模块名,value是模块

    sys.path       # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

    sys.platform     # 返回操作系统平台名称

    sys.stdout      # 标准输出

    sys.stdin      # 标准输入

    sys.stderr      # 错误输出

    sys.exec_prefix   # 返回平 立的python文件安装的位置

    sys.stdin.readline() # 从标准输入读一行

    sys.stdout.write("a") # 屏幕输出a

    3、hashlib模块# 用于加密相关的操作

    常规加密

    import hashlib

    hash_md5 = hashlib.md5()

    hash_md5.update('admin')

    print(hash_md5.hexdigest())

    hash = hashlib.sha512()

    hash.update('admin')

    print hash.hexdigest()

    #以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

    添加自定义key做加密

    import hashlib

    hash = hashlib.md5('898oaFs09f')

    hash.update('admin')

    print hash.hexdigest()

    超 加密-对我们创建的key和内容继续加密

    import hmac

    h = hmac.new('wueiqi')

    h.update('hellowo')

    print h.hexdigest()

    4、json和pickle模块 #用于序列化数据

    json,#json解决简单数据类型的序列换

    pickle,#能存储python的复杂数据类型

    Json模块提供了四个功能:dumps、dump、loads、load

    pickle模块提供了四个功能:dumps、dump、loads、load

    name_tra=json.dumps('[1,2,3,4,5]') #dunmps将序列化的数据放到内存

    with open('json_tra','wb') as f_json:

    f_json.write(name_tra)

    with open('json_tra1','wb') as f_json:#dump直接将内存中序列化的数据写入文件

    json.dump(a,f_json)

    time_now=datetime.datetime.now()

    pickle_mem=p.dumps(time_now)

    pickle_load=p.loads(pickle_mem)

    5、subprocess模块

    subprocess包来fork一个子进程,并运行一个外部的程序,

电脑资料

Python常用模块》(https://www.unjs.com)。

    subprocess包中定义有数个创建子进程的函数。subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。

    subprocess.call()

    父进程等待子进程完成

    返回退出信息(returncode,相当于Linux exit code)

    b=subprocess.call(['ls','-l'])

    b=subprocess.call("ls -l",shell=True)

    shell=True,允许shell命令是字符串形式。

    subprocess.check_call()

    父进程等待子进程完成

    返回0

    检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性,可用try…except…来检查

    subprocess.check_call(["ls", "-l"])

    subprocess.check_call("exit 1", shell=True)

    subprocess.check_output()

    父进程等待子进程完成

    返回子进程向标准输出的输出结果

    检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性和output属性,output属性为标准输出的输出结果,可用try…except…来检查

    6、shuit模块 #文件的复制移动

    shutil.copyfile('data.db', 'archive.db')      # 拷贝文件

    shutil.move('/build/executables', 'installdir')   # 移动文件或目录

    7、logging模块#格式化记录日志

    #通过logging.basicConfig函数对日志的输出格式及方式做相关配置,日志将被写入文件

    logging.basicConfig(level=logging.DEBUG,

    format='%(asctime)s [line:%(lineno)d] %(levelname)s %(message)s',

    datefmt='%Y/%m/%d %H:%M:%S',

    filename='myapp.log',

    filemode='a')

    logging.debug('This is debug message')

    logging.info('This is info message')

    logging.warning('This is warning message')

    #logging.basicConfig函数各参数:

    #datefmt: 指定时间格式,同time.strftime()

    #filename: 指定日志文件名

    #filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'

    #level: 设置日志级别,默认为logging.WARNING

    #format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:

    # %(asctime)s: 打印日志的时间

    # %(levelname)s: 打印日志级别名称

    # %(message)s: 打印日志信息

    # %(levelno)s: 打印日志级别的数值

    # %(lineno)d: 打印日志的当前行号

    # %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]

    # %(filename)s: 打印当前执行程序名

    # %(funcName)s: 打印日志的当前函数

    # %(thread)d: 打印线程ID

    # %(threadName)s: 打印线程名称

    # %(process)d: 打印进程ID

    #将日志同时写入文件,并打印到屏幕

    logging.basicConfig(level=logging.DEBUG,

    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',

    datefmt='%Y/%m%d %H:%M:%S',

    filename='myapp.log',

    filemode='w')

    #打印到屏幕

    console = logging.StreamHandler()

    console.setLevel(logging.WARNING)

    formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')

    console.setFormatter(formatter)

    logging.getLogger().addHandler(console)

    8、random模块 用于取随机数

    random.choice(['apple', 'pear', 'banana']) # 随机取列表一个参数

    random.sample(xrange(100), 10) # 不重复抽取10个

    random.randrange(3,7) #随机抽取整数范围不包括7

    random.random()        # 随机浮点数

    9、time datetime模块时间模块

    时间戳 #1970年1月1日之后的秒,即:time.time()

    格式化的字符串 # 2014-11-11 11:11,  即:time.strftime('%Y-%m-%d')

    结构化时间 # 元组包含了:年、日、星期等... time.struct_time  即:time.localtime()

    import time

    time.time()             # 时间戳[浮点]

    time.localtime()[1] - 1       # 上个月

    int(time.time())          # 时间戳[整s]

    time.strftime('%Y-%m-%d %X') #格式化输出时间

    import datetime

    datetime.datetime.datetime.now() #现在的时间

    datetime.datetime.now() - datetime.timedelta(days=5,hours=3,seconds=3,minutes=2) #减时间

    10、re模块 正则匹配

    #Pattern对象是一个编译好的正则表达式,通过Pattern提供的一系列方法可以对文本进行匹配查找。

    pattern=re.compile(strPattern[, flag]):

    flag是匹配模式,re.I|re.M表示同时生效。

    re.I(re.IGNORECASE): 忽略大小写

    M(MULTILINE): 多行模式,改变'^'和'$'的行为

    match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]): #结果匹配一次

    #match(string[, pos[, endpos]])从string的pos下标处起尝试匹配pattern;如果pattern结束时仍可匹配,则返回一个Match对象;

    pos和endpos的默认值分别为0和len(string);re.match()flags用于编译pattern时指定匹配模式。

    #re.match(pattern, string[, flags])不能指定pos和endpos值。所以匹配的是在开头进行匹配。

    search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]): #结果匹配一次

    #search(string[, pos[, endpos]])从string的pos下标处起尝试匹配pattern,如果pattern结束时仍可匹配,则返回一个Match对象;

    若无法匹配,则将pos加1后重新尝试匹配;直到pos=endpos时仍无法匹配则返回None。

    #re.search(pattern, string[, flags]) ,用于匹配任意开始位

    a='321.423.432.432 33.43.5.42 1.2.443.34 255.52.53.255 2.2.2.2 3.3.3.3'

    pattern=re.compile(r'([12]?\d{1,2}\.){3}([12]?\d{1,2})')

    print pattern.search(a).group()

    split(string[, maxsplit]) | re.split(pattern, string[, maxsplit]):

    按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。

    #a='qwe123dsa43** ***2*342rew'

    #print re.split('[\d* ]+',a)

    findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]):

    搜索string,以列表形式返回全部能匹配的子串。

    p = re.compile(r'\d+')

    print p.findall('one1two2three3four4')

    sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]):

    使用repl替换string中每一个匹配的子串后返回替换后的字符串。

    count用于指定最多替换次数,不指定时全部替换。

    a='321.423.432.432 33.43.5.42 1.2.443.34 255.52.53.255 2.2.2.2 3.3.3.3'

    pattern=re.compile(r'([12]?\d{1,2}\.){3}([12]?\d{1,2})')

    print pattern.sub('bibi',a)

    finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags]):

    搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。

    a='321.423.432.432 33.43.5.42 1.2.443.34 255.52.53.255 2.2.2.2 3.3.3.3'

    pattern=re.compile(r'([12]?\d{1,2}\.){3}([12]?\d{1,2})')

    for i in pattern.finditer(a):

    print(i.group())

最新文章