python3 基礎(5)-模塊(1)-模塊的導入、標準模塊(標準庫)

模塊介紹

  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 


標準模塊(標準庫)

timedatetime模塊

  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)   #返回壓縮文檔的路徑



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章