zoukankan      html  css  js  c++  java
  • python基础20——time模块&random模块&os模块&sys模块&shutil模块

    time模块


    时间模块优先掌握的操作

    一:time
    import time

    时间分为三种格式:

    1、时间戳:从1970年到现在经过的秒数

    作用:用于时间间隔的计算

    print(time.time())

    2、按照某种格式显示的时间:2020-03-30 11:11:11

    作用:用于展示时间

    print(time.strftime('%Y-%m-%d %H:%M:%S %p'))
    print(time.strftime('%Y-%m-%d %X'))

    3、结构化的时间

    作用:用于单独获取时间的某一部分

    res=time.localtime()
    print(res)
    print(res.tm_year)
    print(res.tm_yday)

    二:datetime

    import datetime

    print(datetime.datetime.now())
    print(datetime.datetime.now() + datetime.timedelta(days=3))
    print(datetime.datetime.now() + datetime.timedelta(weeks=1))

     

    # 时间模块需要掌握的操作

    1、时间格式的转换

    struct_time->时间戳


    import time
    s_time=time.localtime()
    print(time.mktime(s_time))

    # 时间戳->struct_time
    tp_time=time.time()
    print(time.localtime(tp_time))

    # 补充:世界标准时间与本地时间

    print(time.localtime())

    print(time.gmtime())            # 世界标准时间,了解

    print(time.localtime(333333333))       # 将一个时间戳转换为当前时区的struct_time,secs参数未提供,则以当前时间为准

    print(time.gmtime(333333333))      # gmtime()方法是将一个时间戳转换为UTC时区(0时区的struct_time

                       # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出

    struct_time->格式化的字符串形式的时间
    s_time=time.localtime()
    print(time.strftime('%Y-%m-%d %H:%M:%S',s_time))

    print(time.strptime('1988-03-03 11:11:11','%Y-%m-%d %H:%M:%S'))


    # 真正需要掌握的只有一条:format string<------>timestamp

    strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和

    # '1988-03-03 11:11:11'+7

    # format string--->struct_time--->timestamp

    # struct_time=time.strptime('1988-03-03 11:11:11','%Y-%m-%d %H:%M:%S')

    # timestamp=time.mktime(struct_time)+7*86400

    # print(timestamp)

    # format string<---struct_time<---timestamp

    # res=time.strftime('%Y-%m-%d %X',time.localtime(timestamp))

    # print(res)

    # time.sleep(3)

    # 了解知识

    import time

    print(time.asctime())             # asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'


    import datetime      #实现时间加减

    print(datetime.datetime.now())

    print(datetime.datetime.utcnow())

    print(datetime.datetime.fromtimestamp(333333))

     

    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([111, 'aaa', [4, 5]]))     # 1或者23或者[4,5]

    print(random.sample([111, 'aaa', 'ccc','ddd'],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

    res=''
    for i in range(6):
      从26大写字母中随机取出一个=chr(random.randint(65,90))
      从10个数字中随机取出一个=str(random.randint(0,9))

      随机字符=random.choice([从26大写字母中随机取出一个,从10个数字中随机取出一个])
      res+=随机字符

    import random

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

    print(make_code(6))

     

     

     

     

     

     

    OS模块

    import os

    # 获取某一个文件夹下所有的子文件以及子文件夹的名字

    res=os.listdir('.')
    print(res)


    size=os.path.getsize(r'/Users/linhaifeng/PycharmProjects/s14/day22/01 时间模块.py')

    print(size)

     

    os.remove() 删除一个文件

    os.rename("oldname","newname") 重命名文件/目录

     

    # 应用程序----》"ls /"
    # os.system("ls /")

    # 规定:key与value必须都为字符串

    os.environ['aaaaaaaaaa']='111'
    print(os.environ)


    print(os.path.dirname(r'/a/b/c/d.txt'))
    print(os.path.basename(r'/a/b/c/d.txt'))


    print(os.path.isfile(r'笔记.txt'))
    print(os.path.isfile(r'aaa'))
    print(os.path.isdir(r'aaa'))

    print(os.path.join('a','/','b','c','d'))

     


    # 推荐用这种

    BASE_DIR=os.path.dirname(os.path.dirname(__file__))

    print(BASE_DIR)


    BASE_DIR=os.path.normpath(os.path.join(
                        __file__,
                        '..',
                        '..'
                       ))
    print(BASE_DIR)

    在python3.5之后,推出了一个新的模块pathlib

    from pathlib import Path

    res = Path(__file__).parent.parent
    print(res)


    res=Path('/a/b/c') / 'd/e.txt'

    print(res)

    print(res.resolve())

     

     

    sys模块

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


    import sys

    python3.8 run.py 1 2 3

    sys.argv获取的是解释器后参数值(包括文件路径)

    print(sys.argv)

    src_file=input('源文件路径: ').strip()
    dst_file=input('目标文件路径: ').strip()

    src_file=sys.argv[1]            # 要求用户按照顺序传,如果经过判断不满足条件那么就报错!!!
    dst_file=sys.argv[2]


    # 判断
    with open(r'%s' %src_file,mode='rb') as read_f,
      open(r'%s' %dst_file,mode='wb') as write_f:
      for line in read_f:
        write_f.write(line)

    打印进度条(可以添加到文件加载界面使用)

    # python3.8 run.py src_file dst_file


    print('[%-50s]' %'#')
    print('[%-50s]' %'##')
    print('[%-50s]' %'###')

     

    import time

    res=''
    for i in range(50):
      res+='#'
      time.sleep(0.5)
      print(' [%-50s]' % res,end='')


    import time


    def progress(percent):
      if percent > 1:
        percent = 1
      res = int(50 * percent) * '#'
      print(' [%-50s] %d%%' % (res, int(100 * percent)), end='')

    recv_size=0
    total_size=1025011

    while recv_size < total_size:
      time.sleep(0.01)           # 下载了1024个字节的数据

    recv_size+=1024              # recv_size=2048

    # 打印进度条
    print(recv_size)
    percent = recv_size / total_size      # 1024 / 333333
    progress(percent)

     

     

     

     

     

     

     

    shutil模块

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

    shutil.copyfileobj(fsrc, fdst[, length])
    将文件内容拷贝到另一个文件中

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

     

    shutil.copyfile(src, dst)
    拷贝文件

    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.copy(src, dst)
    拷贝文件和权限

    1 import shutil
    2  
    3 shutil.copy('f1.log', 'f2.log')

     

    shutil.copy2(src, dst)
    拷贝文件和状态信息

    1 import shutil
    2  
    3 shutil.copy2('f1.log', 'f2.log')

     

    shutil.ignore_patterns(*patterns)
    shutil.copytree(src, dst, symlinks=False, ignore=None)
    递归的去拷贝文件夹

    1 import shutil
    2  
    3 shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除
    拷贝软连接

    import shutil shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) ''' 通常的拷贝都把软连接拷贝成硬链接,即对待软连接来说,创建新的文件


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

    1 import shutil
    2  
    3 shutil.rmtree('folder1')

     

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

    1 import shutil
    2  
    3 shutil.move('folder1', 'folder3')

     

    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 两个模块来进行的,详细:

    zipfile压缩解压缩
    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()


    tarfile压缩解压缩
    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()
     
     
  • 相关阅读:
    Linux 下 MQ 的安装
    云计算的三种服务模式:IaaS,PaaS和SaaS
    Mac下安装Maven
    JDK Mac 安装
    Mac OS 终端利器 iTerm2
    单元测试用例规范
    boolean 属性的定义规范
    2019-12-9号 终于入职 阿里巴巴
    远程调试方法
    系统提测及上线规范(系统上线必读!)
  • 原文地址:https://www.cnblogs.com/lucky-cat233/p/12600617.html
Copyright © 2011-2022 走看看