zoukankan      html  css  js  c++  java
  • python基础之常用模块以及格式化输出

    模块简介

      模块,用一砣代码实现了某个功能的代码集合。 

    类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

    如:os 是系统相关的模块;file是文件操作相关的模块

    模块分为三种:自定义模块、第三方模块、内置模块,下边简单介绍一些常用模块

    #_*_coding:utf-8_*_

    import time
    import datetime
     
    print(time.clock()) #返回处理器时间,3.3开始已废弃
    print(time.process_time()) #返回处理器时间,3.3开始已废弃
    print(time.time()) #返回当前系统时间戳
    print(time.ctime()) #输出Tue Jan 26 18:23:48 2016 ,当前系统时间
    print(time.ctime(time.time()-86640)) #将时间戳转为字符串格式
    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) #sleep
    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 module
     
    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)

      time模块,time.sleep,让程序运行的时候停止一段时间,默认为秒,,下图就是先输出123,停顿5秒之后输出456

    import time
    print("123")
    time.sleep(5)
    print("456")
    123
    456

      time.time,时间戳,表示从1970(unix的诞生时间)到现在过了多少秒

    import time
    print(time.time())
    1466052658.7172651

       time.ctime返回当前日期的字符串格式

    import time
    print(time.ctime())
    Thu Jun 16 12:57:07 2016

      还可以将时间戳改为此格式

    import time
    print(time.ctime(time.time()))
    Thu Jun 16 13:00:59 2016

       gmtime,将年,月,日等时间日期分割成一个对象,可以单独打印调用等

    import time
    a = time.gmtime(time.time())
    print(a)
    print(a.tm_year)
    time.struct_time(tm_year=2016, tm_mon=6, tm_mday=16, tm_hour=5, tm_min=8, tm_sec=19, tm_wday=3, tm_yday=168, tm_isdst=0)
    2016

       sys模块相关操作

    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       错误相关

      sys.argv可以获取到用户给脚本传入的参数并根据此来执行程序

    import sys
    print(sys.argv)
    if sys.argv[1] == "hehe":
        print("haha")
    else:
        print("heihei")
    
    
    D:UsersAdministratorPycharmProjectsuntitled1>python3 txt1.py 1 2 3
    ['txt1.py', '1', '2', '3']
    
    D:UsersAdministratorPycharmProjectsuntitled1>python3 txt1.py hehe
    ['txt1.py', 'hehe']
    haha

      sys.path,让我们看一下,结尾的site-packages是存放所有第三方模块,它是全局的,只要模块放到这里,任何路径下都可以导入,该路径基于ide,或者用sys.path.apped也可以将模块直接加入python的默认路径。

    import sys
    print(sys.path)
    
    ['D:\Users\Administrator\PycharmProjects\untitled1', 'D:\Users\Administrator\PycharmProjects\untitled1', 'D:\Users\Administrator\AppData\Local\Programs\Python\Python35\python35.zip', 'D:\Users\Administrator\AppData\Local\Programs\Python\Python35\DLLs', 'D:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib', 'D:\Users\Administrator\AppData\Local\Programs\Python\Python35', 'D:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\site-packages']

       利用sys.stdout写一个类似进度条的程序,此写法仅仅适合2.7

    import sys
    import time
    for i in range(100):
        sys.stdout.write("#")
        time.sleep(1)

       3.5这样写

    import sys
    import time
    for i in range(100):
        sys.stdout.write("#")
        sys.stdout.flush()
        time.sleep(1)

       json和pickle模块

     

    • pickle   用于【python特有的类型】 和 【python基本数据类型】间进行转换
    • json     用于【字符串】和 【python基本数据类型】 间进行转换(可用于不同语言之前转换)。

      pickle的dumps方法可以将数据通过特殊的方式转换成只有python认识的特殊二进制格式,这里的二进制和普通字符二进制表示方式还是不同的。

    import pickle        
    a = {"k":"v","key":"v}
    b = pickle.dumps(a)  
    print(b)        
    
         b'x80x03}qx00(Xx03x00x00x00keyqx01Xx05x00x00x00valueqx02Xx01x00x00x00kqx03Xx01x00x00x00vqx04u.'

      pickle.dump,将数据

     通过特殊方式转换成只有python认识的特殊二进制格式,并写入文件。

    import pickle                  
    a = "hello"                    
    with open("abc","wb")  as  f:  
        pickle.dump(a,f)           
                                   

       json和pickle的用法基本是相同的,json转换为字符串格式。

    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命令,直接显示
    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所指向的文件或者目录的最后修改时间 

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

    import hashlib
     
    # ######## 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来在做加密,898oaFs09f就是自定义的key

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

    python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密

    import hmac
     
    h = hmac.new(bytes('898oaFs09f',encoding="utf-8"))
    h.update(bytes('admin',encoding="utf-8"))
    print(h.hexdigest())

       格式化输出之百分号方式

    %[(name)][flags][width].[precision]typecode
    
    (name)      可选,用于选择指定的key
    flags          可选,可供选择的值有:
    +       右对齐;正数前加正好,负数前加负号;
    -        左对齐;正数前无符号,负数前加负号;
    空格    右对齐;正数前加空格,负数前加负号;
    0        右对齐;正数前无符号,负数前加负号;用0填充空白处
    width         可选,占有宽度
    .precision   可选,小数点后保留的位数
    typecode    必选
    s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
    r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
    c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
    o,将整数转换成 八  进制表示,并将其格式化到指定位置
    x,将整数转换成十六进制表示,并将其格式化到指定位置
    d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
    e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
    E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
    f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
    F,同上
    g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
    G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
    %,当字符串中存在格式化标志时,需要用 %%表示一个百分号
    注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式
    
    常用格式化:

    tpl = "i am %s" % "alex"
     
    tpl = "i am %s age %d" % ("alex"18)
    
    
     
    tpl = "i am %(name)s age %(age)d" % {"name""alex""age"18}
    
    
    
    
    tpl = "percent %.2f" % 99.97623
    
    
    
    
    tpl = "i am %(pp).2f" % {"pp"123.425556, }
    
    
    
    
    tpl = "i am %.2f %%" % {"pp"123.425556, }
    
    

       格式化之format方式

    tpl = "i am {}, age {}, {}".format("seven", 18, 'alex')
      
    tpl = "i am {}, age {}, {}".format(*["seven", 18, 'alex'])
      
    tpl = "i am {0}, age {1}, really {0}".format("seven", 18)
      
    tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18])
      
    tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)
      
    tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})
      
    tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])
      
    tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)
      
    tpl = "i am {:s}, age {:d}".format(*["seven", 18])
      
    tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18)
      
    tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})
     
    tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
     
    tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
     
    tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
     
    tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)
  • 相关阅读:
    iOS:Core Data 中的简单ORM
    Win8:Snap 实现
    js: 删除node的所有child
    WinJS:Listview item 设置背景透明
    iOS: 消息通信中的Notification&KVO
    win8: 清除iframe的缓存
    What's New in iOS7,iOS7新特性介绍
    "Entity Framework数据插入性能追踪"读后总结
    夜,思考——我想要的到底是什么?
    【查询】—Entity Framework实例详解
  • 原文地址:https://www.cnblogs.com/kading/p/5590608.html
Copyright © 2011-2022 走看看