zoukankan      html  css  js  c++  java
  • day5----模块

    1.定义
        模块:用来从逻辑上组织python代码(变量,函数,类,运行逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)
        包:用来从逻辑上组织模块儿的,本质就是一个目录,必须带有一个__init__.py文件。
     
    2.导入方法
        import module_name
        import module1_name,module2_name
        from module_alex import *
     
        from module_alex import module_name as module_name_alex(别名)
     
        引用。
        module_name.变量
        module_name.函数
     
    3.import本质(路径搜索和搜索路径)
        导入模块的本质就是把python文件解释一遍
        导入包的本质就是解释包下的__init__.py 文件
            import module_name --->module_name.py ---->moudle_name.py的路径---->sys.path.apend(add)
     
    4.导入优化
     from module_alex import module_name
     
    5.模块的分类
        a.标准库
        b.开源模块
        c.自定义模块
     
    自定义模块:

    导入模块

    Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法:

    import module
    from module.xx.xx import xx
    from module.xx.xx import xx as rename  
    from module.xx.xx import *

    导入模块其实就是告诉Python解释器去解释那个py文件

    • 导入一个py文件,解释器解释该py文件
    • 导入一个包,解释器解释该包下的 __init__.py 文件

    那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path

    如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。
    通过os模块可以获取各种目录,例如

    import sys
    import os
    
    pre_path = os.path.abspath('../')
    sys.path.append(pre_path)

    内置模块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所指向的文件或者目录的最后修改时间

    内置模块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]

    内置模块HASHLIB

    import hashlib
     
    # ######## md5 ########
     
    hash = hashlib.md5()
    hash.update('admin')
    print hash.hexdigest()
     
    # ######## sha1 ########
     
    hash = hashlib.sha1()
    hash.update('admin')
    print hash.hexdigest()
     
    # ######## sha256 ########
     
    hash = hashlib.sha256()
    hash.update('admin')
    print hash.hexdigest()
     
     
    # ######## sha384 ########
     
    hash = hashlib.sha384()
    hash.update('admin')
    print hash.hexdigest()
     
    # ######## sha512 ########
     
    hash = hashlib.sha512()
    hash.update('admin')
    print hash.hexdigest()

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

    import hashlib
     
    # ######## md5 ########
     
    hash = hashlib.md5('898oaFs09f')
    hash.update('admin')
    print hash.hexdigest()

    random模块

    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
     

    time & datetime模块

    import time
    import datetime
     
    # time模块
     
    print(time.clock())    # 输出=>3.110193534902903e-07
    print(time.process_time())  # 输出=>0.031200199999999997
    # 返回当前时间戳,即1970.1.1至今的秒数
    print(time.time())  # 输出=>1454239454.328046
     
    # 当前系统时间
    print(time.ctime())    # 输出=>Sun Jan 31 19:24:14 2016
     
    # 将当前时间戳转换成字符串格式的时间
    print(time.ctime(time.time()))  # 输出=>Sun Jan 31 19:24:14 2016
     
    # 将时间戳转换成struct_time格式
    print(time.gmtime(time.time()))
    # time.struct_time(tm_year=2016, tm_mon=1, tm_mday=31, tm_hour=11, tm_min=24, tm_sec=14, tm_wday=6, tm_yday=31, tm_isdst=0)
     
    # 将本地时间的时间戳转换成struct_time格式
    print(time.localtime(time.time()))
    # time.struct_time(tm_year=2016, tm_mon=1, tm_mday=31, tm_hour=19, tm_min=24, tm_sec=14, tm_wday=6, tm_yday=31, tm_isdst=0)
     
    # 与上面的相反,将struct_time格式转回成时间戳格式。
    print(time.mktime(time.localtime()))    # 输出=>1454239454.0
     
    # sleep
    # time.sleep(4)
     
    # 将struct_time格式转成指定的字符串格式
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))  # 输出=>2016-02-01 13:53:22
     
    # 将字符串格式转成struct_time格式
    print(time.strptime("2016-02-01", "%Y-%m-%d"))
    # time.struct_time(tm_year=2016, tm_mon=2, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=32, tm_isdst=-1)
     
    # datetime 模块
     
    print(datetime.date.today())    # 输出=>2016-02-01
     
    print(datetime.date.fromtimestamp(time.time() - 86640))    # 输出=>2016-01-31
     
    current_time = datetime.datetime.now()
    print(current_time)    # 输出=>2016-02-01 14:01:02.428880
     
    # 返回struct_time格式的时间
    print(current_time.timetuple())
    # time.struct_time(tm_year=2016, tm_mon=2, tm_mday=1, tm_hour=14, tm_min=1, tm_sec=41, tm_wday=0, tm_yday=32, tm_isdst=-1)
     
    # 指定替换
    # datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
    print(current_time.replace(2008, 8, 8))    # 输出=>2008-08-08 14:03:53.901093
     
    # 将字符串转换成日期格式
    str_to_date = datetime.datetime.strptime("2016-02-01", "%Y-%m-%d")
    print(str_to_date)  # 输出=>2016-02-01 00:00:00
     
    # 比现在+10d
    new_date = datetime.datetime.now() + datetime.timedelta(days=10)
    print(new_date)    # 输出=>2016-02-11 14:46:49.158138
     
    # 比现在-10d
    new_date = datetime.datetime.now() - datetime.timedelta(days=10)
    print(new_date)    # 输出=>2016-01-22 14:53:03.712109
     
    # 比现在+10h
    new_date = datetime.datetime.now() + datetime.timedelta(hours=10)
    print(new_date)    # 输出=>2016-02-02 00:53:03.712109
     
    # 比现在+120s
    new_date = datetime.datetime.now() + datetime.timedelta(seconds=120)
    print(new_date)    # 输出=>2016-02-01 14:55:03.712109

     

  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/dcc001/p/5808129.html
Copyright © 2011-2022 走看看