Python day21:常用模块2

一、time模块
import time

一:时间有三种格式(*****)

1、时间戳(float 类型):秒数 ===> 用于时间计算
    缺省时,默认是当前的时间

        start=time.time()
        print(start,type(start))


2、结构化的时间(struct_time 类型) ===> 获取时间的某一部分
    将时间零散的拆分成各个部分

        res = time.localtime()
        res1 = time.gmtime()

        print(res,type(res))
        print(res.tm_year)

        print(res)
        print(res1)


3、格式化的字符串时间(str 类型) ===> 用于显示给人看
    遵循一定格式组织的时间
    
    gmtime 世界标准时间

    localtime 当地时间

        %p 显示 上午、下午
                am   pm 

            res=time.strftime("%Y-%m-%d %H:%S:%M %p")
            res=time.strftime("%Y-%m-%d %X")
            print(res,type(res))

二:时间转换

格式化的字符串 是另外两者的中介



                    localtime:缺省,则当前
                    gmtime                             strftime
      ---------------------->             ---------------------->
时间戳(timestamp)            结构化的时间(struct_time)             格式化的字符串时间(Format String)
      <----------------------             <----------------------
        maktime                             strptime           



转换用到的函数:
        
    1、localtime([secs]) : 将一个时间戳转换为当前时区的struct_time。
                            secs参数未提供,则以当前时间为准。
                
                time.localtime()
                time.localtime(1473525444.037215)
    
    2、gmtime([secs]) : 将一个时间戳转换为UTC时区(0时区)的struct_time
                        和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。



    3、mktime(t) : 将一个struct_time转化为时间戳。

                print(time.mktime(time.localtime()))#1473525749.0


    4、strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和 time.gmtime()返回)转化为格式化的时间字符串。
                                如果t未指定,将传入time.localtime()。
                                如果元组中任何一个元素越界,ValueError的错误将会被抛出。

                print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56


    5、strptime(string[, format]) : 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

                print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))


    6、time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
                                                        tm_wday=3, tm_yday=125, tm_isdst=-1)
            在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。



2.1 时间戳--->格式化的字符串

        struct_time=time.localtime(3333.3)
        res=time.strftime("%Y:%m",struct_time)
        print(res)

2.2 格式化的字符串时间--->时间戳

        struct_time=time.strptime("2017-07-03 11:11:11","%Y-%m-%d %H:%M:%S")
        res=time.mktime(struct_time)
        print(res)

三:
asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
如果没有参数,将会将time.localtime()作为参数传入。

        print(time.asctime())#Sun Sep 11 00:43:43 2016
        print(time.asctime(time.localtime(3333.3)))

ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。
                    如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

        print(time.ctime())  # Sun Sep 11 00:46:38 2016
        print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016
        print(time.ctime(3333.3))

四: sleep(secs) : 线程推迟指定的时间运行,单位为秒。

        time.sleep(3)

==========================> datetime模块========================
import datetime

1、获取当前时间
print(datetime.datetime.now())

2、时间戳---转成--->日期格式

3、只显示日期:
    print(datetime.date.fromtimestamp(time.time()))
    # 2020-07-30

4、显示日期+时分
    print(datetime.datetime.fromtimestamp(time.time()))
    # 2020-07-30 16:20:58.497910

5、加时间
print(datetime.datetime.now() + datetime.timedelta(days=3))

6、减时间
print(datetime.datetime.now() + datetime.timedelta(days=-3))

7、替换时间
print(datetime.datetime.now())
new_res=res.replace(year=1999,month=9)
print(new_res)

==========================> random模块 <=============================

        import random

# os.path.以下各个函数

random模块中的常用函数:

1、random(): 随机 产生一个小数 (0,1)    
            print(random.random())
            #大于0且小于1之间的小数

2、randint(): 随机 产生一个整数 [a,b]         
        
            print(random.randint(1,3)) #[1,3]

3、choice(): 随机 选取一个元素
        
            print(random.choice([1,'23',[4,5]]))

4、sample(): 随机 选取列表中任意2个元素进行组合
        
            print(random.sample([1,'23',[4,5]],2))

5、uniform(): 随机 产生一个小数(a,b) 
            
            print(random.uniform(1,3))
            # 大于1小于3的小数,如1.927109612082716

6、shuffle(): 打乱列表中元素的顺序,相当于"洗牌"
        
        item=[1,3,5,7,9]
        random.shuffle(item)
        print(item)

随机验证码原理:随机的字母 、随机的数字 里面挑选一个作为一个结果

    def make_code(n=5):
        res = ''
        for i in range(n):
            s1 = str(random.randint(0, 9))  # 产生数字
            s2 = chr(random.randint(65, 90)) # 产生字母
            # 每一轮生成一个数字or字母,将他们连接在总的字符串上
            res += random.choice([s1, s2])
        return res

    print(make_code(4))

========================> os模块 <===============================

os模块是与操作系统交互的一个接口
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。

import os

# os.path.以下各个函数

os.path下的常用函数

1、dirname(): 返回path的目录。【推荐此方式!】
                其实就是os.path.split(path)的第一个元素

        print(os.path.dirname("D:/python全栈15期/day21/03os模块.py"))

    2、normpath(): 返回path的路径,【不推荐此方式!】
        
        res=os.path.join(
            __file__,
            "..",
            ".."
        )

        print(os.path.normpath(res))

3、basename(): 返回path最后的文件名。
                如果path以/或\结尾,那么就会返回空值。
                即os.path.split(path)的第二个元素

        print(os.path.basename("D:/python全栈15期/day21/03os模块.py"))

4、join(): 将多个路径组合后返回,
            第一个绝对路径之前的参数将被忽略

        print(os.path.join("a",'b','D:\c','d.txt'))

5、isabs():判断是否是绝对路径

        print(os.path.isabs("D:/python全栈15期/day21/"))
        print(os.path.isabs("/python全栈15期/day21/"))

6、rename():  重命名文件/目录

7、remove(): 删除一个文件

8、split(path): 将path分割成目录和文件名二元组返回

9、getsize(): 返回该文件/文件夹的大小

10、exists(): 判断路径是否存在  
                如果path存在,返回True;如果path不存在,返回False
        
        print(os.path.exists("D:/python全栈15期/day21/"))

11、isfile(): 判断文件是否存在  
                如果path是一个存在的文件!文件!文件!,返回True。否则返回False

12、isdir(): 判断目录是否存在
                如果path是一个存在的目录!目录!目录!,则返回True。否则返回False

13、split(): 将path分割成目录和文件名二元组返回

14、listdir('dirname'): 列出指定目录下的所有文件和子目录,
                          包括隐藏文件,并以列表方式打印

模拟windows的cmd.exe终端:

    import os
    print(os.listdir("."))

    import os

    cmd=input(r"""
    Microsoft Windows [版本 10.0.17763.1339]
    (c) 2018 Microsoft Corporation。保留所有权利。

    %s=====> """ %os.getcwd())
    res=os.system(cmd)
    print('='*100)
    print(res)


    import os
    print(__file__)
    print(os.path.abspath(__file__))

    res=os.path.split("D:/python全栈15期/day21/03 os模块.py")
    # 用于将 所在的文件夹的路径,和文件名 相分割开,存进元组里面
    print(res)

======================> subprocess模块 <=================================

    import subprocess

    # pwd ; sasdfasdf ;echo 123

    obj = subprocess.Popen("**这里是命令名称**", shell=True,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE
                           )

    res1=obj.stdout.read()
    res2=obj.stderr.read()
    # print(res1.decode('gbk'))
    print(res2.decode('gbk'))

不同的进程,都有只属于自己的内存空间(这是物理隔离);进程不能访问其他进程的内存空间(安全保护机制)

为满足 不同进程之间的通信(数据共享)的需求,开辟的共享内存

管道 属于共享内存;不同的进程都可以访问这块内存

操作系统命令的结果默认 是直接返回到终端,

通过将结果,接收放到管道,可以对 结果进行处理


应用程序 的命令 都是调用 操作系统的命令,来执行服务

windows提供的cmd.exe也是一个操作系统的提供的一个应用程序

一个windows系统命令,就是一个程序

命令运行程序格式 以空格为分隔符

解释器 程序名 + 传入的参数

也相当于,input方式,一次输入一个参数
相比较而言,这种写在一行的形式,更为简洁
区别在于,传入程序所需要的参数 的方式

在windows的cmd中 由于windows命令是.exe直接运行的文件,所以不需要加解释器

而要运行 .py文件的话,则需要加python解释器

sys.argv 将参数采集 命令行中传入的参数, 用索引[index]来区分采集的是哪一个参数

永久的配置 写到 配置文件中
临时的配置 通过 传入参数

======================sys模块==========================

    import sys

    sys.path
    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 f1,open(r"%s" %dst_file,mode='wb') as f2:
        for line in f1:
            f2.write(line)

实现打印进度条=====================

原理:通过静态的方案实现动态的效果

原理阐述:
import time
print("[# ]",end='')
time.sleep(0.3)
print("\r[## ]",end='')
time.sleep(0.3)
print("\r[### ]",end='')
time.sleep(0.3)
print("\r[#### ]",end='')

    print("[%-15s]" % "###",)
    print("[%-15s]" % "####",)

实现代码:
import time

    def progress(percent):
        if percent > 1:
            percent=1

        # 第二个%号代表取消第一个%的特殊意义 
        # -50用来控制对齐方式、宽度
        print("\r[%-50s] %d%%" % ("#"*int(50*percent),int(100 * percent)),end='')

    total_size = 1025
    recv_size = 0

    while recv_size < total_size:
        
        # 每次下载1024
        time.sleep(0.3)

        #模拟数据的传输延迟
        recv_size+=1024

        #接收的比例
        percent = recv_size / total_size

        progress(percent)

\r 是在行首打印

进度条的原理:用 静态 模拟出 动态 效果
替换整体静态,速度很快时,就成了动态

% 的优先级比 * 高
在进度条中,要使用括号,标注优先级

1 sys.argv 命令行参数List,第一个元素是程序本身路径

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。