zoukankan      html  css  js  c++  java
  • 包与time,datetime,random,sys,shutil 模块


    一、包
    包是什么?
    包是一种通过使用‘.模块名’来组织python模块名称空间的方式。
    注意:
    1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错。
      2. 创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式而已,包的本质就是一种模块。

    注意事项:
    1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:
    凡是在导入时带点的,点的左边都必须是一个包,否则非法。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
    2、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件
    3、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

    需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法

    绝对导入和相对导入
    绝对导入:以glance作为起始
    相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

    二、time与datetime模块

    在Python中,通常有这几种方式来表示时间:
    1.时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
    2.格式化的时间字符串(Format String)
    3.结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

    import time

    print(time.time()) # 时间戳:1487130156.419527
    print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2017-02-15 11:40:53'

    print(time.localtime()) #本地时区的struct_time
    print(time.gmtime()) #UTC时区的struct_time

    其中计算机认识的时间只能是'时间戳'格式,而程序员可处理的或者说人类能看懂的时间有: '格式化的时间字符串','结构化的时间' ,于是有了下图的转换关系:

        

          

        #时间加减
    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)) #时间替换

    三、random模块

    import random

    print(random.random())#(0,1)----float 大于0且小于1之间的小数
    print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之间的整数
    print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数
    print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
    print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
    print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716

    item=[1,3,5,7,9]
    random.shuffle(item) #打乱item的顺序,相当于"洗牌"
    print(item)


    模拟验证码:
    import random

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

    print(make_code(10))

    四、sys模块

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

    第一个%是取消第二个%号的特殊意义的
    num=30
    print('%s%%' %num)


    模拟进度条:
    def progress(percent,width=50):
    if percent > 1:
    percent=1
    show_str=('[%%-%ds]' %width) %(int(width*percent) * '#')
    print(' %s %d%%' %(show_str,int(100*percent)),end='')

    import time
    recv_size=0
    total_size=11111111
    while recv_size < total_size:
    time.sleep(0.1)
    recv_size+=8096
    percent=recv_size / total_size
    progress(percent)

    五、shutil模块

    高级的 文件、文件夹、压缩包 处理模块

    1. shutil.copyfileobj(fsrc, fdst[, length])
    将文件内容拷贝到另一个文件中
    import shutil
    shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

    2. shutil.copyfile(src, dst)
    拷贝文件
    shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

    3. hutil.copymode(src, dst)
    仅拷贝权限。内容、组、用户均不变
    shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

    4. shutil.copystat(src, dst)
    仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
    shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

    5. shutil.copy(src, dst)
    拷贝文件和权限
    import shutil
    shutil.copy('f1.log', 'f2.log')


    6. shutil.copy2(src, dst)
    拷贝文件和状态信息
    import shutil
    shutil.copy2('f1.log', 'f2.log')

    7. shutil.ignore_patterns(*patterns)
    shutil.copytree(src, dst, symlinks=False, ignore=None)
    递归的去拷贝文件夹
    import shutil
    shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除


    8. shutil.rmtree(path[, ignore_errors[, onerror]])
    递归的去删除文件
    import shutil
    shutil.rmtree('folder1')


    9. shutil.move(src, dst)
    递归的去移动文件,它类似mv命令,其实就是重命名。
    import shutil
    shutil.move('folder1', 'folder3')

    10. shutil.make_archive(base_name, format,...)
    创建压缩包并返回文件路径,例如:zip、tar
    base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
    如 data_bak =>保存至当前路径
    如:/tmp/data_bak =>保存至/tmp/
    format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    root_dir: 要压缩的文件夹路径(默认当前目录)
    owner: 用户,默认当前用户
    group: 组,默认当前组
    logger: 用于记录日志,通常是logging.Logger对象

    将 /data 下的文件打包放置当前程序目录
    import shutil
    ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')

    将 /data下的文件打包放置 /tmp/目录
    import shutil
    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()
    
    
  • 相关阅读:
    CSS样式表
    lianxi!
    传值
    lei!
    3.10
    if else&& stwitch break
    if else 语句
    2016.3.6
    进制转换
    PHP 面向对象的三大特征
  • 原文地址:https://www.cnblogs.com/zhaodafa/p/8745344.html
Copyright © 2011-2022 走看看