文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python3 基础(5)-模块(1)-

2023-01-31 07:51

关注

模块介绍

  1. 补充:

    1. 通过os模块获取各种路径(目录)

      import os

      print(__file__)   #返回程序的相对路径

      print(os.path.abspath(__file__))   #返回程序的绝对路径

      print(os.path.dirname(os.path.abspath(__file__)))   #返回程序所在位置的父目录

      print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))  #返回程序所在位置的父目录的父目录

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

      print("----------------------------")

      #输出

      D:/PycharmProjects/day04/Atm/bin/atm.py

      D:\PycharmProjects\day04\Atm\bin\atm.py

      D:\PycharmProjects\day04\Atm\bin

      D:\PycharmProjects\day04\Atm

      ----------------------------


    2. 将路径(环境变量)添加到sys.path列表中:

      即:当sys.path路径列表没有你想要的路径时,可以通过 sys.path.append('路径') 添加。

      注:程序搜索路径时,从sys.path列表的左边顺序搜索到右边,直到有匹配的

      import os,sys

      print(sys.path)

      BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  #返回程序所在位置的父目录的父目录

      print(BASE_DIR)

      sys.path.append(BASE_DIR)   #追加环境变量到列表末尾,有时可用insert插入指定位置

      print(sys.path)

      print("----------------------------")

      #输出

      ['D:\\PycharmProjects\\day04\\Atm\\bin', 'D:\\PycharmProjects', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32\\python36.zip', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32\\lib', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages']

      D:\PycharmProjects\day04\Atm

      ['D:\\PycharmProjects\\day04\\Atm\\bin', 'D:\\PycharmProjects', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32\\python36.zip', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32\\lib', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32', 'C:\\Users\\Thinkpad\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages', 'D:\\PycharmProjects\\day04\\Atm']

      ----------------------------


  2. 模块的定义:

    用来从逻辑上组织python代码,形式上就是以.py结尾的python文件(例:文件名为test.py,则模块名就为test)。可以包含内容(代码块):变量、函数、类、逻辑等;Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用。

  3. 作用:

    实现程序需要的某个功能

  4. 模块的分类:(后面有详细介绍)

    1. 内置标准模块(又称标准库)

    2. 开源模块

    3. 自定义模块


模块导入这里主要讲自定义模块的导入

  1. 导入模块(包括方法属性)的方式:

    1. 同级(相同目录)导入

      1. main.py程序对module_hello等模块及方法属性的调用?

        同级别导入.png

        #导入模块   #将模块里的所有方法属性拿到当前程序执行一遍

        import module_hello   #单独导入一个模块

        import module_hello,module2,module3   #导入N个模块

        #调用模块的方法属性:模块.属性

        print(module_hello.name)

        module_hello.say_hello()

        #导入模块中的方法属性    #将模块里的某个或某些方法属性拿到当前程序执行一遍

        from module_hello import *      #导入模块中的所有属性,建议不用

        from module_hello import loggin   #从一个模块中单独导入某个方法属性

        from module_hello import loggin,m2,m3   #从一个模块中导入N个方法属性

        from module_hello import loggin as loggin_new #从一个模块中单独导入某个方法属性,并重命名

        #调用模块的方法属性:属性

        loggin_new()

        loggin()


    2. 不同级导入

      1. atm.py程序对main模块和atm_test模块及方法属性的调用?

        不同级别导入.png

        import os,sys

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

        sys.path.append(BASE_DIR)

        print("----------------------------")

        #导入模块或某些属性的操作

        import atm_test   #导入模块 atm_test

        atm_test.test()

        print(atm_test.a)

        from atm_test import a   #导入模块的属性a

        print(a)

        print("----------------------------")

        #导入包下的模块或包下的包的操作

        #方式一

        from core import main   #从包core导入模块main;如果main是一个包,也用from

        main.login()

        #方式二

        import core   #导入目录(包),执行的是目录下的__init__.py文件,

                      #所以将模块main先导入__init__.py文件

                      #使用 from . import main

        core.main.login()

        #输出

        ----------------------------

        this is Atm/atm_test.py

        atm_test

        atm_test

        ----------------------------

        this is Atm/core/__init__.py

        Welcome to ICBC ATM

        Welcome to ICBC ATM

        ----------------------------


  2. 导入模块(包括方法属性)的本质

    1. Python解释器把被导入的“模块名.py”文件解释一遍

    2. 过程:确定模块名.py文件-->搜索“模块名.py”文件路径-->sys.path路径列表(当前路径在列表的[0]位,当调用模块时,会先在程序当前路径搜索相应文件)

  3. 知识补充:

    1. 包的定义:用来从逻辑上组织模块(N个模块的集合),形式就是一个目录(必须带有一个__init__.py文件)

    2. 包的导入:import 目录名;Python解释器解释该包下的 __init__.py 文件

    3. 实例:执行main.py调用包package_test(因为不同级调用,所以这里要先确定路径)

      包.png

    4. 导入包的本质:执行包下的__init__.py文件。如果包内有多个模块,可以先将这些模块先导入到__init__.py文件里,这样“import 目录名”就可以调用包里的模块功能了

  4. 问题:

  5. 当程序中当前定义的函数(再如变量、类等)名和导入模块的方法属性相同时,程序最终应用谁的结果?当然是后执行的结果,相当于后定义或后导入的会覆盖前面的。

  6. 导入优化

    1. 直接导入模块的某个或某些属性比导入整个模块执行效率高,特别是被程序多次调用时。


自定义模块

  1. 自定义模块.png


开源模块

    下载、安装、导入、使用。

    如:paramiko模块

    自定义模块和开源模块的使用参考 http://www.cnblogs.com/wupeiqi/articles/4963027.html 


标准模块(标准库)

time与datetime模块

  1. 与时间处理有关的模块就包括:time,datetime以及calendar。

  2. 世界标准时间,UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间。在中国时间为UTC+8。DST(Daylight Saving Time)即夏令时。

  3. 在Python中,time模块实现主要调用C库,所以各个平台可能有所不同。通常有这几种方式来表示时间:

    1. 时间戳 (timestamp)方式:以秒计算的浮点数。通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。可以返回时间戳的函数主要有time(),clock()等。我们运行“type(time.time())”,返回的是float类型。

    2. 格式化的时间字符串

    3. 元组(struct_time)方式:struct_time元组共有9个元素。可以返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出struct_time中的几个元素:

      属性(Attribute)

      值(Values)

       tm_year(年)

       如2018

       tm_mon(月)

       1 - 12

       tm_mday(日)

       1 - 31

       tm_hour(时)

       0 - 23

       tm_min(分)

       0 - 59

       tm_sec(秒)

       0 - 61

       tm_wday(weekday)

       0 - 6(0表示周一)

       tm_yday(一年中的第几天)

       1 - 366

       tm_isdst(是否是夏令时)

       默认为-1


  4. 格式化时间的格式表

    格式

    含义

    备注

    %y

    去掉世纪的年份(00 - 99)


    %Y

    完整的年份


    %m

    一年中的第几个月(01 - 12)


    %b

    一年中的第几个月,月份的英文简化名称,如“Jun”


    %B

    一年中的第几个月,月份的英文完整名称,如“April”


    %d

    一个月中的第几天(01 - 31)


    %j

    一年中的第几天(001 - 366)


    %w

    一个星期中的第几天(0 - 6,0是星期一)


    %a

    一个星期中的第几天,星期的英文简化名称,如“Sun”


    %A

    一个星期中的第几天,星期的英文完整名称,如“Wednesday”


    %U

    一年中的第几个星期(00 - 53

    )。(星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。

    当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U才会被计算。

    %W

    和%U基本相同,不同的是%W以星期一为一个星期的开始。

     当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%W才会被计算。

    小时

    %H

    一天中的第几个小时(24小时制,00 - 23)


    %I

    一天中的第几个小时(12小时制,01 - 12)


    %M

    分钟数(00 - 59)


    %S

    秒(01 - 61)

    不是59,因为闰年秒占两秒

    组合日期时间

    %c

    日期和时间,同"%a %b %d %H:%M:%S %Y"


    %x

    日期,如:04/04/18


    %X

    时间,如:14:20:48


    其他

    %p

    本地am或者pm的相应符

    与“%I”配合使用才有效果

    %Z

    时区的名字(如果不存在为空字符)


    %%

    ‘%’字符


  5. time模块中常用的几个函数:

    import time

    # 获取时间戳

    # time.time():返回当前时间的时间戳,以秒为单位。

    t = time.time()

    print(t)

    print(type(t))

    d = t/60/60/24

    print(d)

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

    # time.clock():返回时间戳。这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)

    time.sleep(1)

    print("clock1:%s" % time.clock())  #其中第一个clock()输出的是程序运行时间

    time.sleep(1)

    print("clock2:%s" % time.clock())  #第二、三个clock()输出的都是与第一个clock的时间间隔

    time.sleep(1)

    print("clock3:%s" % time.clock())

    # time.mktime(t): 将一个struct_time转化为时间戳。

    t = time.mktime(time.localtime())

    print(t)

    t = time.mktime(time.gmtime())

    print(t)

    t = time.mktime(time.strptime("2018-04-03 16:29:28","%Y-%m-%d %H:%M:%S"))

    print(t)

    print("------------1-------------")

    # 获取struct_time

    # time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。

    # 如果secs参数未提供,则以当前时间为准。

    t = time.localtime()  #同time.localtime(time.time())

    print(t)

    print(t.tm_year)

    t = time.localtime(1304575584.1361799)

    print(t)

    print(t.tm_year)

    print(t.tm_wday)

    # time.gmtime([secs]):将一个时间戳转换为UTC时区(0时区)的struct_time,和localtime()方法类似

    t = time.gmtime()

    print(t)

    print(t.tm_mday)

    # time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。

    # 实际上它和strftime()是逆操作;

    # 前面格式必须一一对应后面格式;

    # 在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。

    t = time.strptime('Sun Jun 5 16:37:06 2011')

    print(t)

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

    print(t)

    t = time.strptime('16:37:06', '%X')   #此时年月日默认为19000101

    print(t)

    t = time.strptime("2018-04-03 16:29:28","%Y-%m-%d %H:%M:%S")

    print(t)

    print("------------2-------------")

    # 获取格式化时间字符串

    # time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串;

    # 如果t未指定,将传入time.localtime()。

    # 如果元组中任何一个元素越界,ValueError的错误将会被抛出。

    t = time.strftime("%m%d %H:%M:%S%Y")

    print(type(t))

    print(t)

    t = time.strftime("%Y%m%d %H:%M:%S",time.localtime())

    print(t)

    t = time.strftime("%Y%m%d %H:%M:%S",time.gmtime())

    print(t)

    t = time.strftime("%Y-%m-%d %X",time.localtime())

    print(t)

    t = time.strftime("%m-%d-%Y.  %b %d %Y is a %A on the %d day of %B.")

    print(t)

    t = time.strftime("%c",)   #同time.strftime("%a %b %d %H:%M:%S %Y")

    print(t)

    t = time.strftime("%c",time.gmtime())

    print(t)

    t = time.strftime("%x",time.gmtime())

    print(t)

    t = time.strftime("%H",)

    print(t)

    t = time.strftime("%H",time.gmtime())

    print(t)

    print("------------3-------------")

    # 获取这种形式:"%a %b %d %H:%M:%S %Y"

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

    # 如果没有参数,将会将time.localtime()作为参数传入。

    t = time.asctime()  #同time.asctime(time.localtime())

    print(t)

    t = time.asctime(time.localtime(23456765.24543))

    print(t)

    t = time.asctime(time.strptime("2017-10-08 23:04:20", "%Y-%m-%d %H:%M:%S"))

    print(t)

    # time.ctime([secs]):把一个时间戳转化为time.asctime()的形式;

    # 如果参数未给或者为None的时候,将会默认time.time()为参数。

    t = time.ctime() #同time.ctime(time.time())

    print(t)

    t = time.ctime(23456765.24543)

    print(t)

    print("------------4-------------")

    #补充

    print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了time.process_time()测量处理器运算时间,不包括sleep时间,不稳定,mac上测不出来

    print(time.altzone)  #返回与utc时间的时间差,以秒计算\

    print(time.gmtime(time.time()-800000)) #返回utc时间的struc时间对象格式

    print("------------5-------------")


  6. time各表示方式的转化关系图:

    time各表示方式的转化关系图.png

  7. 补充:datetime模块

    1. 支持日期和时间简单和复杂的方法;

    2. 实现的重点放在更有效的处理和格式化输出;

    3. 该模块还支持时区处理:

      import datetime

      print(datetime.date.today())   #获取今天日期

      print(datetime.datetime.now()) #获取当前格式化日期时间

      print(datetime.datetime.fromtimestamp(time.time()) )  # 时间戳直接转成日期时间格式

      print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式

      # 时间加减

      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)) #时间替换,将原来获取的时间替换成指定的时间

      #格式化输出

      now = datetime.date.today()

      print(now.strftime("%c"))

      print(datetime.datetime.now().strftime("%A, %B %d %Y"))

      print("------------6-------------")

      # 实例

      # 计算年龄

      import datetime

      now = datetime.date.today()

      birthday = datetime.date(1989,8,16)

      age = now - birthday

      print(age.days/365)

      print("------------7-------------")


ramdom模块

  1. 提供了生成随机数的功能

    import random

    #返回一个随机浮点数:

    print(random.random())  #用于随机生成一个0到1的符点数: 0 <= n < 1.0

    print(random.uniform(1,10))   #用于随机生成一个指定范围内的符点数

    #返回一个随机整数:

    print(random.randint(1,10))  #用于随机生成一个指定范围内的整数 a <= n <= b,其中参数a是下限,参数b是上限

    print(random.randrange(1,10)) #从指定范围内range([start], stop[, step]),按指定步长递增的列表中,随机获取一个整数。

    print(random.randrange(1, 100, 5))

    #返回一个随机字符

    print(random.choice('zhenxingzhonghua')) #从序列sequence中获取一个随机元素。序列有字符串、列表、元组等

    print(random.choice("学习Python"))

    #返回一个随机字符串

    print(random.choice(["JGood","is","a","handsome","boy"])) #从序列sequence中获取一个随机元素。

    print(random.choice(("zhangsan","lisi","wangwu")))

    #返回一个指定数量的随机字符的列表

    print(random.sample([1,2,3,4,5],3))  #从指定序列sequence中随机获取指定数量k的片断列表。sample函数不会修改原有序列。

    print(random.sample("xinzhong",5))

    #洗牌

    items = [1,2,3,4,5,6,7]

    print(items)

    random.shuffle(items)

    print(items)

    print("----------------------------")

    #输出

    0.1516067281469653

    8.132218238196891

    2

    3

    21

    u

    n

    a

    zhangsan

    [3, 2, 4]

    ['x', 'h', 'n', 'i', 'n']

    [1, 2, 3, 4, 5, 6, 7]

    [3, 2, 7, 4, 6, 1, 5]

    ----------------------------

  2. 实例:

    import random

    #随机生成一个0到100间的偶数:

    print(random.randrange(0, 100, 2))

    #生成随机验证码:

    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)

    print("----------------------------")

    #输出

    20

    84YW

    ----------------------------

os模块

  1. 提供了不少与操作系统相关联的函数。

  2. 提供了非常丰富的方法用来处理文件和目录。

  3. 补充:表示路径path的方式(window平台下)

    #相对路径

    os.属性("test\\test1\\test2")

    os.属性(r"test\test1\test2")

    os.属性("test/test1/test2")

    os.属性("./test/test1/test2")

    #绝对路径

    os.属性("E:\\test")

    os.属性(r"E:\test")

    os.属性("E:/test")

    os.属性(".")   #属于什么路径?

    os.属性("..")

  4. 方法实例:

    更多参考:https://docs.python.org/3.6/library/os.html?highlight=os#module-os

    import os

    #获取当前程序的工作目录

    p = os.getcwd() #获取当前工作目录,即当前python脚本执行的目录路径;相当于shell下pwd

    print(p)

    p = os.curdir  #以字符串"."的形式获取当前工作目录

    print(p)

    p = os.pardir  #以字符串".."的形式获取当前工作目录的父目录

    print(p)

    print(os.getcwd())

    #更改当前程序的工作目录

    os.chdir("E:/test")   #改变当前脚本工作目录为E:\test;相当于shell下cd

    print(os.getcwd())

    print("-------------1---------------")

    #创建目录

    os.makedirs('dirname1/dirname2')    #创建多级目录。当前工作目录下创建多层递归目录;若文件已存在时,则无法创建文件

    #os.makedirs("d:/test/a/b/c/d")    #指定目录“d:/test”下创建多层递归目录;若文件已存在时,则无法创建文件

    os.mkdir('dirname3')    #创建单级目录;当前工作目录下创建一层目录;相当于shell中mkdir dirname

    #os.mkdir("d:/test/a1")  #指定目录("d:/test/")下生成单级目录;

    #删除空目录

    os.removedirs('dirname1/dirname2')    #删除多级目录。若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推;目录不是空的删除会报错

    os.rmdir('dirname3')    #删除单级空目录,若目录不为空则无法删除;目录不是空的删除会报错;相当于shell中rmdir dirname

    #列表方式获取目录下的所有文档

    l = os.listdir()    #列出当前工作目录的所有文件和子目录,包括隐藏文件,并以列表方式打印

    print(l)

    l = os.listdir(".")

    print(l)

    l = os.listdir("./abc")

    print(l)

    l = os.listdir("..")

    print(l)

    l = os.listdir("d:/test")   #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

    print(l)

    #删除文件

    os.remove("E:/test/a.txt")  #删除指定路径下的一个文件,文件不存在会报错

    #重命名文件/目录

    os.rename("oldname","newname")  #重命名指定路径下的目录;这里为当前路径;文件不存在会报错

    os.rename("oldname.txt","newname.txt")  #重命名指定路径下的文件;这里为当前路径;文件不存在会报错

    print("-------------2---------------")

    #获取文件或目录信息

    s = os.stat('newname')  #获取文件/目录信息,创建日期、修改日期等;文件不存在会报错

    print(s)

    #获取分隔符

    s = os.sep    #输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

    print(s)

    l = os.linesep    #输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

    print(l)

    p = os.pathsep    #输出用于分割文件路径的字符串;看系统环境变量os.environ #PATH

    print(p)

    #查看当前使用系统平台

    n = os.name    #输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

    print(n)

    #运行当前使用系统平台的命令

    #os.system("bash command")  #运行shell命令,直接显示

    os.system("dir")

    s = os.system("ipconfig /all")

    print(s)

    #获取系统环境变量

    e = os.environ  #获取系统环境变量

    print(e)

    print("-------------3---------------")

    #获取路径(获取目录、文件名)  #os.chdir("E:/test")改变工作目录后,terminal和pycharm的执行结果有差异?????????

    #不要求路径存在;路径(文件或目录)不存在不会报错,正常执行

    p = os.path.abspath("bbbbb")  #返回指定path的规范化的绝对路径

    print(p)

    print(__file__)   #返回当前程序的相对路径

    p = os.path.abspath(__file__)  #返回当前程序的绝对路径

    print(p)

    s = os.path.split(__file__)  #将当前路径分割成两段,以二元组形式返回("路径/目录","目录名/文件名")

    print(s)

    s = os.path.split(os.path.abspath(__file__))  #将路径path分割成两段,以二元组形式返回("路径/目录","目录名/文件名")

    print(s)

    s = os.path.split("")  #将路径path分割成两段,以二元组形式返回("",""),这里两个都是空

    print(s)

    s = os.path.split("d:/abc/abc/ttt.txt")  #将路径path分割成两段,以二元组形式返回("路径/目录","目录名/文件名")

    print(s)

    s = os.path.split("d:/abc/abc")  #将路径path分割成两段,以二元组形式返回("路径/目录","目录名/文件名")

    print(s)

    dp = os.path.dirname("d:/abc/abc")  #返回路径path的目录。其实就是os.path.split(path)的第一个元素

    print(dp)

    bp = os.path.basename("d:/abc/abc")  #返回路径path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

    print(bp)

    #身份判断

    print(os.path.exists("d:/test"))  #如果路径path存在,返回True;如果path不存在,返回False

    print(os.path.isabs("d:/test"))  #如果路径path是绝对路径,返回True

    print(os.path.isfile(r"E:\test\abc\abc.txt"))  #如果路径path是一个存在的文件,返回True。否则返回False

    print(os.path.isdir("d:/test"))  #如果路径path是一个存在的目录,则返回True。否则返回False

    #组合路径

    # os.path.join(path1[, path2[, ...]])  #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

    p = os.path.join(r"E:\test",r"abcaa",r"aaaabc.txt")

    print(p)

    #获取文件或者目录的最后存取、修改时间

    print(os.path.getatime(r"E:\test\abc\abc.txt"))  #返回路径path所指向的文件或者目录的最后存取时间

    print(os.path.getmtime(r"E:\test\abc"))  #返回路径path所指向的文件或者目录的最后修改时间

sys模块

  1. sys

    import sys

    a = sys.argv   #包含命令行参数的列表,第一个元素是程序本身路径(绝对或相对),

    print(a[0])

    print(a[1])

    print(a[2])

    print(type(a))

    print(a)

    print(sys.version)   #获取Python解释程序的版本信息

    # sys.maxint         #最大的Int值 ?????

    print(sys.path)   #包含了一个提供给Python解释器自动查找所需模块的路径的列表,初始化时使用PYTHONPATH环境变量的值

    print(sys.platform)       #返回操作系统平台名称

    sys.stdout.write('please:')

    val = sys.stdin.readline()[:-1]                       # ??????????

    sys.exit(1)        #退出程序,正常退出时exit(0)            ?????????

shutil模块

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

    import shutil

    # copyfileobj(fsrc, fdst[, length])

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

    # 可以拷贝部分内容;当fdst不存在时,会自动创建

    f1 = open("歌词1","rb")

    f2 = open("歌词2","wb")

    shutil.copyfileobj(f1,f2)

    # 或

    f1 = open("歌词1","r",encoding="utf-8")

    f2 = open("歌词2","w",encoding="utf-8")

    shutil.copyfileobj(f1,f2)

    # copyfile(src, dst)

    # 拷贝文件

    # src要存在

    shutil.copyfile("歌词1","歌词3")

    # copymode(src, dst)

    # 仅拷贝权限

    # 内容、组、用户均不变

    # 去linux系统平台验证

    # copystat(src, dst)

    # 拷贝部分状态信息

    # 包括:mode bits, atime, mtime, flags等

    #要求src, dst都存在

    # 去linux系统平台验证权限变化

    shutil.copystat("歌词1", r"E:\test\abc\abc.txt")

    # copy(src, dst)

    # 拷贝文件和权限

    # copy2(src, dst)

    # 拷贝文件和状态信息

    # ignore_patterns(*patterns)    ????

    # copytree(src, dst, symlinks=False, ignore=None)

    # 递归的去拷贝目录/文件

    # 例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

    shutil.copytree("test","test_copy")

    # rmtree(path[, ignore_errors[, onerror]])

    # 递归的去删除目录/文件

    # 要求src要存在

    shutil.rmtree("test_copy")

    # move(src, dst)

    # 递归的去移动文件/目录

    # 要求src要存在

    shutil.move("test2.zip","package_test")   #移动文件或目录到其他目录

    shutil.move("testtest","testtest2")   #重命名文件/目录

    shutil.move("make_archive_test2.zip","package_test\make_archive_test5.txt")   #移动并重命名

    # make_archive(base_name, format,...)

    # 创建压缩包,并返回文件路径

    # base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,

    # 如:www                        =>保存至当前路径

    # 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/

    # format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”

    # root_dir: 要压缩的文件夹路径(默认当前目录)

    # owner: 用户,默认当前用户

    # group: 组,默认当前组

    # logger: 用于记录日志,通常是logging.Logger对象

    # shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的

    # 可以使用ZipFile 和 TarFile 两个模块将文档单独加入到已有的压缩文件中去

    shutil.make_archive("make_archive_test2","zip","test")   #将当前目录下的文档压缩到当前目录

    a = shutil.make_archive("./test/make_archive_test","zip",r"e:\test")

    print(a)   #返回压缩文档的路径



阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯