1. 程式人生 > 實用技巧 >10-包和模組

10-包和模組

os模組

  • os:operation system
    • 主要提供跟作業系統相關的函式
    • print(os.name) # nt(Windows)
    • print(os.environ) # 環境變數
    • print(os.environ.get('PATH')) # 獲取環境變數中的路徑
  • curdir:current directory 當前目錄(當前資料夾)
    • .表示當前目錄
    • ..表示上一級目錄
    • print(os.curdir)
  • print(os.getcwd())
    • 獲取當前目錄(路徑)
      • 絕對路徑:從磁碟開始的完整路徑
      • 相對路徑:從當前目錄開始的路徑
  • print(os.listdir(r'C:\Users\86188\Desktop\Python_Study'))
    • 獲取指定目錄下的資料夾和檔案的名稱,會得到一個列表
  • mkdir():make directory 在當前目錄下建立(資料夾)目錄
    • os.mkdir('羅志祥')
    • os.makedirs('薛之謙/演員/醜八怪') # 可以建立多層目錄
  • 刪除目錄,刪除的目錄不能是非空目錄
    • os.rmdir('羅志祥')
  • 重新命名,對資料夾或檔案重新命名
    • os.rename('薛之謙', '李榮浩')
  • 刪除檔案
    • os.remove('abc.py')
  • 刪除檔案
    • os.removedirs()可刪除多級空目錄
  • 檔案屬性
    • print(os.stat(r'01_os_Module1.py')) # 寫路徑時儘量在前面加個r

os.path模組(指向了os)

  • abspath():獲取指定檔案的絕對路徑

    • print(os.path.abspath('01_os_Module1.py'))
  • join():拼接多個路徑

    • print(os.path.join(r'C:\Users\86188\Desktop\Python_Study\Day10\02_decorator_parameter.py', 'hello.py'))
  • split(): 分割,把檔案路徑和檔名分割

    • print(os.path.split(r'C:\Users\86188\Desktop\Python_Study\Day11\01_os_Module1.py'))
  • splittext():把檔案的名稱和副檔名分割

    • print(os.path.splittext('hello.py'))
  • isdir():判斷是否為資料夾(目錄)

    • print(os.path.isdir(my_dir))
  • isfile():判斷是否為資料夾(目錄)

    • print(os.path.isfile(my_dir))
  • isabs():判斷是否為絕對路徑

    • os.path.isabs(path)
  • exists():判斷資料夾/檔案是否存在

    • print(os.path.exists(my_dir))
  • getsize():獲取檔案大小,不能獲取資料夾大小

    • print(os.path.getsize(my_file))
  • dirname():父目錄

    • print(os.path.dirname(my_file))
  • basename():獲取檔名

    • print(os.path.basename(my_file))
  • 當前檔案路徑,注意區別

    • print(__file__)

    • print(os.path.abspath(_file_))

    • # 當前檔案路徑
      print(__file__)
      # C:/Users/86188/Desktop/Python_Study/Day11/02_os_Module2.py
      print(os.path.abspath(__file__))
      # C:\Users\86188\Desktop\Python_Study\Day11\02_os_Module2.py
      
  • dir():獲取某個模組(Python檔案)中的所有屬性和函式名

    • import math
    • print(dir(math))
  • os.path.getctime() # 獲取檔案或資料夾的建立時間

  • os.path.getatime() # 獲取檔案或資料夾的最後訪問時間

  • os.path.getmtime() # 獲取檔案或資料夾的最後修改時間

查詢某個目錄下的某種型別檔案

  • # 查詢某個目錄下的py檔案和txt檔案
    import os
    
    def get_file(path):
        # 判斷path是否存在
        if not os.path.exists(path):
            print('路徑不存在')
            return
        # 1.獲取當前path下的所有子檔案和子資料夾名稱
        file_list = os.listdir(path)
        # print(file_list)
        # 2.獲取子檔案的路徑
        for file in file_list:
            file_path = os.path.join(path, file)
            # print(file_path)
            # 3.是否為檔案且是否為.py或.txt檔案
            if os.path.isfile(file_path):
                if file_path.endswith('.py') or file_path.endswith('.txt'):
                    # 列印檔名
                    print(file)
    
    get_file(r'C:\Users\86188\Desktop\Python_Study\Day10')
    
    • 首先要判斷路徑是否存在
    • 注意利用join拼接獲取檔案的絕對路徑

遍歷目錄

  • import os
    
    # 深度遍歷
    # 遍歷目錄
    def search_dir(path):
        filename_list = os.listdir(path)
        for filename in filename_list:
            # file_path:每個子檔案或子資料夾的絕對路徑
            file_path = os.path.join(path, filename)
            # 如果是檔案
            if os.path.isfile(file_path):
                print('檔名:', filename)
            # 如果是目錄
            elif os.path.isdir(file_path):
                print('目錄名:', filename)
                # 遞迴遍歷當前目錄的子目錄
                search_dir(file_path)
    
    search_dir(r'C:\Users\86188\Desktop\Python_Study\Day11\newdir')
    
    • 深度遍歷
    • 注意使用join拼接獲取檔案的絕對路徑
    • 使用遞迴完成

包和模組

  • 模組的種類
    • 1.內建模組,標準模組
    • 2.自定義模組
    • 3.第三方模組
  • 匯入模組
    • import
      • import os
      • import os, math # 不建議這麼寫
    • form...import...
      • 模糊匯入
        • *表示萬用字元
        • from hello import *
      • 精確匯入:只匯入需要的變數或函式或類
        • from hello import age, login
  • 模組的用法
    • 用法:模組名.函式名()
      • math.pow(2, 3)
    • 別名
      • import random as rd
      • print(rd.random())

  • 就是一個包含_init_.py的資料夾
  • 匯入
    • 格式:import 包.模組
      • import aaa.bbb
      • print(aaa.bbb.sex)
    • from...import...
      • from aaa import bbb # 從import後面開始
      • print(bbb.sex)
    • 推薦使用下面的方式匯入包中的模組
      • from aaa.bbb import sex
      • print(sex)

第三方包管理

  • 安裝第三方包
    • 方式一:在Pycharm中安裝
      • a.在需要安裝的包名上按alt+enter選擇'install package request'
      • b.在file->settings=>project=>點選右上角的+進行安裝
    • 方式二:使用命令安裝pip
      • pip命令 -V 檢視pip的版本
      • pip install package 安裝包(預設會從國外的網站下載安裝)
      • pip install package -i 國內源(不會被牆)-豆瓣源&清華源
      • pip uninstall package 解除安裝包
      • pip list 列出(檢視)所有的包
      • pip freeze 列出(檢視)你安裝的包(除了自帶的pip, setuptools)
      • pip show package 顯示包詳情

name屬性

  • __name__的作用:如果不想讓模組中的某些程式碼執行,可以通過屬性僅僅呼叫程式中的一部分功能,寫在if判斷中的程式碼只有當前模組被執行的時候才會被執行,檢測到是其他的檔案在使用當前的模組,則if語句中的程式碼不會被執行
    • if __name__ == "_main_":
    • print(__name__) # __main__