• Python之模块


    模块:是实现某一功能的代码的集合,类似于一个函数。模块在使用时直接导入即可。

    导入模块,其实就是告诉python解释器去解释这个导入的py文件。若导入的是一个包,则python解释器去解释该包里面的__init__.py文件。

    模块导入的时候,是以sys.path作为基准。

    >>> import sys
    >>> print sys.path
    ['', '/usr/local/lib/python2.7/dist-packages/distribute-0.6.28-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/MySQL_python-1.2.4b4-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/pandas-0.16.2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/numpy-1.9.2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/pytz-2015.4-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/python_dateutil-2.4.2-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
    View Code

    一、开源模块

    导入开源模块时,需要现安装该模块包。

    两种安装方式:

    1、在线安装:yum、pip、apt-get

    2、编译安装:下载源码包->解压->编译(python setup.py build)->安装(python setup.py install)

    确认安装成功后,即可导入使用。

    eg:

    安装:

    # pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
     
    # 下载安装 pycrypto
    wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz
    tar -xvf pycrypto-2.6.1.tar.gz
    cd pycrypto-2.6.1
    python setup.py build
    python setup.py install
     
    # 进入python环境,导入Crypto检查是否安装成功
     
    # 下载安装 paramiko
    wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz
    tar -xvf paramiko-1.10.1.tar.gz
    cd paramiko-1.10.1
    python setup.py build
    python setup.py install
     
    # 进入python环境,导入paramiko检查是否安装成功
    安装paramiko模块

    使用:

    #!/usr/bin/env python
    #coding:utf-8
    
    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('192.168.1.108', 22, 'alex', '123')
    stdin, stdout, stderr = ssh.exec_command('df')
    print stdout.read()
    ssh.close();
    通过帐号连接服务器

    二、内置模块

    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    输出用于分割文件路径的字符串
    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模块常用命令

    2、sys模块

    主要用于对解释器相关的操作

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

    3、pickle模块

    主要用于序列化的操作

    pickle:python特有类型和python数据类型之间的转换

    该模块有dump、dumps、load、loads四个方法

    pickle.dumps 将数据通过特殊的形式转换成只有pyton才能识别的字符串。

    >>> import pickle
    >>> data = {'1':123,'2':456}
    >>> print pickle.dumps(data)
    (dp0
    S'1'
    p1
    I123
    sS'2'
    p2
    I456
    s.
    pickle.dumps

    pickle.dump 主要对文件进行操作,它将数据过特殊的形式转换成只有pyton才能识别的字符串,并写入文件。

    >>> with open('result.pk','w') as f:
    ...     pickle.dump(data,f)
    ... 
    >>>
    pickle.dump

    pickle.loads 与dumps相对应,将特殊的字符串转换成python中的数据类型。

    >>> import pickle
    >>> s = [1,2,3,4]
    >>> p1 = pickle.dumps(s)
    >>> print p1
    (lp0
    I1
    aI2
    aI3
    aI4
    a.
    >>> s1 = pickle.loads(p1)
    >>> print s1
    [1, 2, 3, 4]
    pickle.loads

    pickle.load 与dump相对应,将特殊字符串的文件抓换成字符串。

    >>> import pickle
    >>> f = open('result.pk','r')
    >>> s = pickle.load(f)
    >>> print s
    {'1': 123, '2': 456}
    pickle.load

    4、logging模块

    用于日志记录

    eg:

    import logging
     
    logging.warning("user [alex] attempted wrong password more than 3 times")
    logging.critical("server is down")
     
    #输出
    WARNING:root:user [alex] attempted wrong password more than 3 times
    CRITICAL:root:server is down
    logging

    把日志写入文件:

    import logging
     
    logging.basicConfig(filename='example.log',level=logging.INFO)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
    write log into file

    其中下面这句中的level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,在这个例子, 第一条日志是不会被纪录的,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。

    logging.basicConfig(filename='example.log',level=logging.INFO)

    加上时间:

    import logging
    logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
    logging.warning('is when this event was logged.')

    5、time模块

    与时间有关的操作

    时间有三种表示方式:

    • 时间戳               1970年1月1日之后的秒,即:time.time()
    • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')
    • 结构化时间          元组包含了:年、日、星期等... time.struct_time    即:time.localtime()

    eg:

    >>> import time
    >>> print time.time()
    1457588586.28
    >>> print time.mktime(time.localtime())
    1457588652.0
    >>> print time.gmtime()
    time.struct_time(tm_year=2016, tm_mon=3, tm_mday=10, tm_hour=5, tm_min=44, tm_sec=33, tm_wday=3, tm_yday=70, tm_isdst=0)
    >>> print time.strftime('%Y-%m-%d')
    2016-03-10
    
    >>> import datetime
    >>> print datetime.datetime.now()
    2016-03-10 13:49:32.833639
    >>> print datetime.datetime.now() - datetime.timedelta(days=1)
    2016-03-09 13:50:25.230468
    time

    6、re模块

    用于正则匹配

    字符:

      . 匹配除换行符以外的任意字符
      w 匹配字母或数字或下划线或汉字
      s 匹配任意的空白符
      d 匹配数字
       匹配单词的开始或结束
      ^ 匹配字符串的开始
      $ 匹配字符串的结束

    次数:

      * 重复零次或更多次
      + 重复一次或更多次
      ? 重复零次或一次
      {n} 重复n次
      {n,} 重复n次或更多次
      {n,m} 重复n到m次

    IP:
    ^(25[0-5]|2[0-4]d|[0-1]?d?d)(.(25[0-5]|2[0-4]d|[0-1]?d?d)){3}$
    手机号:
    ^1[3|4|5|8][0-9]d{8}$

    match(pattern, string, flags=0)

    从起始位置开始根据模型去字符串中匹配指定内容,匹配单个.

    • 正则表达式
    • 要匹配的字符串
    • 标志位,用于控制正则表达式的匹配方式
    >>> import re
    >>> obj = re.match('d+','123fkdfk')
    >>> print obj.group()
    123

    search(pattern, string, flags=0)

    根据模型去字符串中匹配指定内容,匹配单个。

    >>> obj = re.search('d+','u12323fdkfl')
    >>> print obj.group()
    12323

    findall(pattern, string, flags=0)

    上述两中方式均用于匹配单值,即:只能匹配字符串中的一个,如果想要匹配到字符串中所有符合条件的元素,则需要使用 findall。

    >>> obj = re.findall('d+','fdf343dfldfj098dfdf')
    >>> print obj
    ['343', '098']

    sub(pattern, repl, string, count=0, flags=0)

    用于替换匹配的字符串

    >>> content = '123jkfjkf678'
    >>> new_content = re.sub('d+','sb',content)#将数字替换成'sb'
    >>> print new_content
    sbjkfjkfsb

    split(pattern, string, maxsplit=0, flags=0)

    根据指定匹配进行分组

    >>> content = "'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'"
    >>> new_content = re.split('*',content)
    >>> print new_content
    ["'1-2", '((60-30+1', '(9-2', '5/3+7/3', '99/4', '2998+10', '568/14))-(-4', '3)/(16-3', "2))'"]
    >>> 
    
    >>> new_content = re.split('[+-*/]+',content)
    >>> print new_content
    ["'1", '2', '((60', '30', '1', '(9', '2', '5', '3', '7', '3', '99', '4', '2998', '10', '568', '14))', '(', '4', '3)', '(16', '3', "2))'"]
    >>>
    
    >>> content = "'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'"
    >>> content = re.sub('s*','',content)
    >>> new_content = re.split('(([+-*/]?d+[+-*/]?d+){1})',content,1)
    >>> print new_content
    ["'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-", '-4*3', "/(16-3*2))'"]
    re.split

    7、random模块

    主要生成随机数

    >>> import random
    >>> print random.random()
    0.645138583945
    >>> print random.randint(1,4)
    3
    >>> print random.randrange(1,20)
    10

    生成验证码

    >>> import random
    >>> checkcode = ''
    >>> for i in range(4):
    ...     current = random.randrange(0,4)
    ...     if current != i:
    ...             temp = chr(random.randint(65,90))
    ...     else:
    ...             temp = random.randint(0,9)
    ...     checkcode +=str(temp)
    ... 
    >>> print checkcode
    PBXE
  • 相关阅读:
    ZOJ 3349 Special Subsequence
    ZOJ 3684 Destroy
    ZOJ 3820 Building Fire Stations
    HDU 5291 Candy Distribution
    HDU 3639 Hawk-and-Chicken
    HDU 4780 Candy Factory
    HDU 4276 The Ghost Blows Light
    ZOJ 3556 How Many Sets I
    技术人员的眼界问题
    神经网络和深度学习
  • 原文地址:https://www.cnblogs.com/ahaii/p/5261823.html
Copyright © 2020-2023  润新知