• 包与常用模块:time,sys。


    一  包的初识:

    首先包在pycharm中的表现形式为packa文件夹:在python3种那么我们创建一个packa时会发现下边会自动跟一个—init—.py文件

    包的定义:包就是一个包含有——init——.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来。

    注意:

           1)在python3种,即使包下面没有——init——.py文件,import包仍然不会报错,而且还可以自己创建该文件,在python2种一定要有这个个文件。

           2)创建包的目的不是为了运行,而是供被导入使用,包只是一种形式而已,它的本质还是一种模快。

    2  包的使用:

    在使用包之前我们先说下为什么要用包,包的本质就是一个文件夹,准确来说是一个自带有——init——.py文件的文件夹,那么随着我们功能越来越多,我们不可能将所有的功能都放到一个文件里面去,所以我们创建文件夹来将文件组织起来,来提高程序的结构性,更便于维护。

    导入注意事项:

          1)对于包的导入也可以用import和from。。。import。。。但是包的导入时凡是导入时带点的点的左边必须是一个包,这是导入包特有的语法,而且import后面必须跟一个明确的名字不能带点(...)。

          2)导入后使用的过程就没有这种规定了。

          3)对于包内部模块的直接导入应该使用from。。。import。。。

          4)import导入文件时,产生名称空间中的名字来源于import包,产生的名称空间的名字来源于文件,即包下的——init——.py文件,导入包的本质就是导入该文件。

    from aaa import bbb#在同一个包下相互调用,
    print(bbb.func2)
    res=bbb.func2
    res()
    print(bbb.x)
    import aaa
    from aaa import ccc#调用ccc实际上就是调用ccc下的——init--
    res=aaa.ccc.f
    res1=aaa.ccc.ccc
    res()
    print(res)
    print(res1)
    print(ccc)#我们可以看出输出的结果为ccc下的__init__.py文件的路径,也就是说我们调用ccc其实就是在调用ccc下的init
    
    from aaa import bbb
    bbb.func2()
    print(bbb.x)
    执行文件
    文件bbb
    
    def func2():
        print('from aaa.bbb.func2')
    
    
    x=1
    
    文件init
    
    # import bbb
    
    
    def func():
        print('aaa.init')

    二:模块

    1  time与datetime模块

    2  python中三种时间表示:

             1)时间戳(timestamp):通常来说,时间戳表示的是1970年1月1日00:00:00开始计算的时间偏移量。我们运行type(time.time())返回的是float类型。  2)格式化的时间字符串(format string)

             3)结构化的时间(struct—time):元素共含有九个元素:(年,月 ,日 ,时, 分, 秒,一年中的第几周,一年中的第几天,夏令时)

    3  格式化字符串时间格式:

    格式化字符串时间格式

    4 三种格式之间的转换:

    那么我们为什么要那么复杂的将时间分格式呢,因为计算机只能识别时间戳,而程序员只能识别结构化的时间或格式化的字符串时间。

    那么根据上图一些转换关系:

    1 #--------------------------按图1转换时间
     2 # localtime([secs])
     3 # 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
     4 time.localtime()
     5 time.localtime(1473525444.037215)
     6 
     7 # gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
     8 
     9 # mktime(t) : 将一个struct_time转化为时间戳。
    10 print(time.mktime(time.localtime()))#1473525749.0
    11 
    12 
    13 # strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
    14 # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
    15 # 元素越界,ValueError的错误将会被抛出。
    16 print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
    17 
    18 # time.strptime(string[, format])
    19 # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
    20 print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
    21 #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
    22 #  tm_wday=3, tm_yday=125, tm_isdst=-1)
    23 #在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。
    复制代码
    时间格式转化关系

    5  datetime模块主要的应用:

    #时间加减
    import datetime
    
    # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
    #print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
    # print(datetime.datetime.now() )
    # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
    # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
    # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
    # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
    
    
    #
    # c_time  = datetime.datetime.now()
    # print(c_time.replace(minute=3,hour=2)) #时间替换
    复制代码
    datetime

    其实我们一般应用datetime模块更多,因为他更方便实用。

    我们可以直接导入datetime模块输出我们想要的时间格式:2018-04-08 15:17:27.377304

    import datetime
    print(datetime.datetime.now())

    6 random模块

    random一些常用功能:

     1 import random
     2  
     3 print(random.random())#(0,1)----float    大于0且小于1之间的小数
     4  
     5 print(random.randint(1,3))  #[1,3]    大于等于1且小于等于3之间的整数
     6  
     7 print(random.randrange(1,3)) #[1,3)    大于等于1且小于3之间的整数
     8  
     9 print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
    10  
    11 print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
    12  
    13 print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716 
    14  
    15  
    16 item=[1,3,5,7,9]
    17 random.shuffle(item) #打乱item的顺序,相当于"洗牌"
    18 print(item)

    随机生成验证码:实际应用小模块。

    import random
    def make_code(n):
        res=''
        for i in range(n):
            s1=chr(random.randint(65,90))
            s2=str(random.randint(0,9))
            res+=random.choice([s1,s2])
        return res
    
    print(make_code(9))

    7  sys模块

    sys模块常用功能:

    1 sys.argv           命令行参数List,第一个元素是程序本身路径
    2 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

    使用sys与time模块实现打印进度条:

    打印进度条

    8 shutil模块

    主要对文件和文件夹进行copy,压缩等操作。

         1)文件copy:

    shutil.copyfileobj(fsrc(源文件),fdst[,length])


    将文件内容拷贝到另一个文件中

    1 import shutil
    2 shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

    拷贝文件

    1 shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

    shutil.copymode(src, dst)
    仅拷贝权限。内容、组、用户均不变

    1 shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

    shutil.copystat(src, dst)
    仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

    1 shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

    关于使用shutil来进行文件的压缩与解压:

    shutil.make_archive(base_name, format,...)
    
    创建压缩包并返回文件路径,例如:zip、tar
    
    创建压缩包并返回文件路径,例如:zip、tar
    
    base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
    如 data_bak                       =>保存至当前路径
    如:/tmp/data_bak =>保存至/tmp/
    format:    压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    root_dir:    要压缩的文件夹路径(默认当前目录)
    owner:    用户,默认当前用户
    group:    组,默认当前组
    logger:    用于记录日志,通常是logging.Logger对象
    
    
    1 #将 /data 下的文件打包放置当前程序目录
    2 import shutil
    3 ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
    4   
    5   
    6 #将 /data下的文件打包放置 /tmp/目录
    7 import shutil
    8 ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data') 
    
    shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
    
    
    
    
    import zipfile
    
    # 压缩
    z = zipfile.ZipFile('laxi.zip', 'w')
    z.write('a.log')
    z.write('data.data')
    z.close()
    
    # 解压
    z = zipfile.ZipFile('laxi.zip', 'r')
    z.extractall(path='.')
    z.close()
    
    
    
    import tarfile
    
    # 压缩
    >>> t=tarfile.open('/tmp/egon.tar','w')
    >>> t.add('/test1/a.py',arcname='a.bak')
    >>> t.add('/test1/b.py',arcname='b.bak')
    >>> t.close()
    
    
    # 解压
    >>> t=tarfile.open('/tmp/egon.tar','r')
    >>> t.extractall('/egon')
    >>> t.close()
    复制代码
    V文件压缩与解压

















  • 相关阅读:
    Scanner和BufferedReader
    java annotation
    java获取短uuid
    定时任务线程
    sql 查询最近30分钟或者自定义时间数据
    查看base64编码图片
    oracle 的PACKAGE恢复过程
    Oracle BFILE备忘
    读取Spring的配置文件applicationContext.xml的5种方法
    解决eclipse ctrl+鼠标左键不能用
  • 原文地址:https://www.cnblogs.com/zhangsanfeng/p/8745349.html
Copyright © 2020-2023  润新知