zoukankan      html  css  js  c++  java
  • 模块和运算符

    一、python模块

    Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:

    • Python内部提供的模块
    • 业内开源的模块
    • 程序员自己开发的模块

    1.python内部提供一个sys模块

    + 其中的 sys.argv 用来捕获执行执行python脚本时传入的参数:
    
    import sys
    
    strings = sys.argv
    print strings  # 所有参数 类型为列表
    #['test.py', 'hello']
    print(strings[0])   # 脚本名本身
    # test.py
    print(strings[1])   # 第一个参数
    # hello
    print(strings[2])   # 第二个参数
    # world
    print(strings[-1])  # 倒数第一个参数
    # world
    $ python test.py hello world
    

    1.用于提供对Python解释器相关的操作:

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

    2、os模块,用于提供系统级别的操作:

    os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
    os.curdir                   返回当前目录: ('.')
    os.pardir                   获取当前目录的父目录字符串名:('..')
    os.makedirs('dir1/dir2')    可生成多层递归目录
    os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    os.remove()                 删除一个文件
    os.rename("oldname","new")  重命名文件/目录
    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命令,直接显示,不能保存执行结果<br>os.popen("bash command").read()   运行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所指向的文件或者目录的最后修改时间
    

    遍历循环目录下的所有文件

    #coding:utf-8
    import os
    def getDir(dir_path,level):
    	level += 1
    	for name in os.listdir(dir_path):
    		print "--"*level +name
    		sub_dir = dir_path+os.sep+name
    		if os.path.isdir(sub_dir):
    			getDir(sub_dir,level)
    		
    
    
    getDir("E:\test",-1)
    

    3.hashlib,用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法:

    # ######## md5 ########
    hash = hashlib.md5()
    # help(hash.update)
    hash.update(bytes('admin', encoding='utf-8'))
    print(hash.hexdigest())
    print(hash.digest())
      
      
    ######## sha1 ########
      
    hash = hashlib.sha1()
    hash.update(bytes('admin', encoding='utf-8'))
    print(hash.hexdigest())
      
    # ######## sha256 ########
      
    hash = hashlib.sha256()
    hash.update(bytes('admin', encoding='utf-8'))
    print(hash.hexdigest())
      
      
    # ######## sha384 ########
      
    hash = hashlib.sha384()
    hash.update(bytes('admin', encoding='utf-8'))
    print(hash.hexdigest())
      
    # ######## sha512 ########
      
    hash = hashlib.sha512()
    hash.update(bytes('admin', encoding='utf-8'))
    print(hash.hexdigest())
    

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

    import hashlib
      
    # ######## md5 ########
      
    hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
    hash.update(bytes('admin',encoding="utf-8"))
    print(hash.hexdigest())
    

    4.random

    import random
      
    print(random.random())              # 生成0-1之间的随机小数
    print(random.randint(1, 20))       #生成1到20的整数包括20
    print random.uniform(10, 20)     #生成10到20之间的浮点数
    print(random.randrange(1, 10))  #生成1到10的证书不包括10,第3个参数可以指定步长
    print(random.choice(["JGood", "is", "a", "handsome", "boy"])) # 从序列中随机选一个数
     
    # 每次对序列随机排序
    p = ["Python", "is", "powerful", "simple"]
    random.shuffle(p)
    print(p)
    
    # random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。
    list=[1,2,3,4,5,6,7,8,9,10]
    slice=random.sample(list,5)#从list中随机获取5个元素,作为一个片断返回
    print slice
    printlist#原有序列并没有改变。
    

    5.time&datetime

    时间相关的操作,时间有三种表示方式:

    • 时间戳 1970年1月1日之后的秒,即:time.time()
    • 格式化的字符串 2014-11-11 11:11, 即:time.strftime('%Y-%m-%d')
    • 结构化时间 元组包含了:年、日、星期等... time.struct_time 即:time.localtime()
      time
    import time
     
    print(time.clock())    #返回处理器时间,3.3开始已废弃
    print(time.process_time()) #返回处理器时间,3.3开始已废弃<br>
    print(time.time())    #返回当前系统时间戳输出:1471161757.5214906
    print(time.ctime())   #输出字符串格式时间:Sun Aug 14 16:04:02 2016 ,当前系统时间
    print(time.ctime(time.time()-86640))   #将时间戳转为字符串格式<br>print(time.gmtime())  #获取结构化时间
    print(time.gmtime(time.time()-86640))  #将时间戳转换成struct_time格式
    print(time.localtime(time.time()-86640)) #将时间戳转换成struct_time格式,但返回的本地时间
    print(time.mktime(time.localtime())) #与time.localtime()功能相反,将struct_time格式转回成时间戳格式
    time.sleep(4)  #睡上4秒
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将struct_time格式转成指定的字符串格式
    print(time.strptime("2016-01-28","%Y-%m-%d") ) #将字符串格式转换成struct_time格式
    

    datetime

    import datetime
     
    print(datetime.date.today()) #输出格式 2016-01-26
    print(datetime.date.fromtimestamp(time.time()-864400) )  #2016-01-16 将时间戳转成日期格式
    current_time = datetime.datetime.now() #
    print(current_time)   #输出2016-01-26 19:04:30.335935
    print(current_time.timetuple())  #返回struct_time格式
      
    #datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
    print(current_time.replace(2014,9,12))  #输出2014-09-12 19:06:24.074900,返回当前时间,但指定的值将被替换
      
    str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") #将字符串转换成日期格式
    new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天
    new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天
    new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时
    new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s
    print(new_date)
    

    6.logging

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用。

    日志级别对应的数字:

    CRITICAL = 50   ERROR = 40   WARNING = 30   INFO = 20   DEBUG = 10   NOTSET =0
    

    日志记录格式:

    %(name)s Logger的名字
    %(levelno)s 数字形式的日志级别
    %(levelname)s 文本形式的日志级别
    %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
    %(filename)s 调用日志输出函数的模块的文件名
    %(module)s 调用日志输出函数的模块名
    %(funcName)s 调用日志输出函数的函数名
    %(lineno)d 调用日志输出函数的语句所在的代码行
    %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
    %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
    %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    %(thread)d 线程ID。可能没有
    %(threadName)s 线程名。可能没有
    %(process)d 进程ID。可能没有
    %(message)s用户输出的消息
    

    1、单文件日志

    import logging
     
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S %p',
                        filename='test.log',
                        filemode='w')
     
    logging.debug('debug message')
    logging.info('info message')
    logging.warning('warning message')
    logging.error('error message')
    logging.critical('critical message')
    

    2.多文件日志
    对于上述记录日志的功能,只能将日志记录在单文件中,如果想要设置多个日志文件,logging.basicConfig将无法完成,需要自定义文件和日志操作对象。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
     
    import logging
     
    #获取日志器对象
    logger = logging.getLogger('TEST-LOG')  # 返回一个logger对象,没有指定的话默认是root logger
    logger.setLevel(logging.DEBUG)  #设置全局日志级别
     
    #定义屏幕控制器把日志输出屏幕
    ch = logging.StreamHandler()  
    ch.setLevel(logging.DEBUG)   # 输出屏幕的日志级别
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    ch.setFormatter(formatter)   # 给输出屏幕的日志设置日志格式
    logger.addHandler(ch)        # 将设定好的控制器添加到日志器中
     
    #定义文件控制器把日志输出文件
    fh = logging.FileHandler("access.log") 
    fh.setLevel(logging.WARNING)  #设置输出文件的日志级别
    formatter1 = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter1)   # 给输出文件的日志设置日志格式
    logger.addHandler(fh)         # 将设定好的控制器添加到日志器中
     
    logger.debug('debug message')
    logger.info('info message')
    logger.warn('warn message')
    logger.error('error message')
    logger.critical('critical message')
    

    二、python运算符

    以下假设变量a为10,变量b为21:

    Python算术运算符

    运算符 描述 实例
    + 加 - 两个对象相加 a + b 输出结果 31
    - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -11
    * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 210
    / 除 - x 除以 y b / a 输出结果 2.1
    % 取模 - 返回除法的余数 b % a 输出结果 1
    ** 幂 - 返回x的y次幂 a**b 为10的21次方
    // 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0

    python比较运算符

    运算符 描述 实例
    == 等于 - 比较对象是否相等 (a == b) 返回 False。
    != 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
    > 大于 - 返回x是否大于y (a > b) 返回 False。
    < 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 true。
    >= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
    <= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。

    python赋值运算符

    运算符 描述 实例
    = 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
    += 加法赋值运算符 c += a 等效于 c = c + a
    -= 减法赋值运算符 c -= a 等效于 c = c - a
    *= 乘法赋值运算符 c *= a 等效于 c = c * a
    /= 除法赋值运算符 c /= a 等效于 c = c / a
    %= 取模赋值运算符 c %= a 等效于 c = c % a
    **= 幂赋值运算符 c **= a 等效于 c = c ** a
    //= 取整除赋值运算符 c //= a 等效于 c = c // a

    Python逻辑运算符

    运算符 描述 实例
    and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
    or x or y 布尔"或" - 如果 x 是 True,它返回 True,否则它返回 y 的计算值。 (a or b) 返回 10。
    not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False

    Python身份运算符
    身份运算符用于比较两个对象的存储单元

    运算符 描述 实例
    is is是判断两个标识符是不是引用自一个对象 x is y, 如果 id(x) 等于 id(y) , is 返回结果 1
    is not is not 是判断两个标识符是不是引用自不同对象 x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1

    Python成员运算符

    运算符 描述 实例
    in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
    not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
  • 相关阅读:
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/flyhgx/p/6649914.html
Copyright © 2011-2022 走看看