Python內置模塊之OS

2022-01-02 點滴技術


今天分享下python內置模塊中的OS模塊,os模塊是大家經常會使用到的,雖然有path這個模塊替代os, 但是大家可能還是比較熟悉os吧,那麼我自己也總結下os模塊中常用的一些方法和屬性。

怎麼開始用這個模塊呢,因為是內置的,所以不用額外安裝,直接import即可


1.系統操作相關方法和變量用途os.name查看當前作業系統的名稱,windows返回nt,linux返回posixos.environ獲取系統環境變量os.sep當前平臺的路徑分隔符,windown是\,linux是'/'os.altsep可替代的路徑分隔符,window中為/.os.extsep文件名和文件拓展名之間分隔符的符號,windown為.os.pathsepPATH環境變量中的分隔符,window為; linux為:os.linesep行結束符,windows為\r\n, linux為\nos.devnullwindow為nul,linux為/dev/nullos.defpath當使用exec函數族的時候,如果沒有指定PATH環境變量,則默認會查找os.defpath中的值作為子進程PATH的值。

以下簡單列幾個常用的屬性:

os.name

說明:返回的是當前作業系統的名稱.

import os
>>> os.name

# windows返回結果:
nt

# linux返回結果
'posix'

os.environ

說明:獲取當前系統的環境變量.

>>> os.environ

# windows返回結果
environ({'ALLUSERSPROFILE': 'C:\\ProgramData'...省略...

# linux返回結果
>>> os.environ
environ({'XDG_SESSION_ID': '2', 'HOSTNAME': 'localhost.localdomain'...省略...         

os.sep

說明:獲取當前作業系統路徑分隔符.

分隔符\在windows和linux都能使用。

>>> os.sep

# windows返回結果:
'\\'
# linux返回結果:
'/'

舉一個小慄子:

# windows組合一個路徑
path = "log"
with open(path + '/' + 'test.txt', 'w') as f:
    f.write('hello world.')

os.linesep

說明:獲取當前作業系統行的分隔符.

>>> os.linesep

# windows返回結果
'\r\n'

# linux返回結果
'\n'

舉個小慄子對比下:
windows環境下使用\r行分隔符,也會換行

windows環境下使用\r\n行分隔符,相當於換2行:

2.文件和目錄的操作方法和變量用途os.getcwd()獲取當前工作目錄,即當前python腳本工作的目錄路徑os.chdir()改變當前工作目錄os.makedirs(')當前路徑創建一個目錄(可多級目錄創建)os.removedirs()遞歸刪除空目錄os.mkdir()生成單級目錄os.rmdir()刪除單級空目錄os.listdir()列出指定目錄下的所有文件和子目錄,包括隱藏文件.os.remove()刪除文件os.rename(old, new)重命名文件或文件夾os.stat()獲取文件或文件夾信息os.path.abspath()獲取文件或文件夾的絕對路徑os.path.split()獲取返回文件夾和文件二元組os.path.dirname()獲取返回的是路徑中的目錄名,看做是split後的第一個元素os.path.basename()獲取返回的是路徑中的文件名,看做是split後的第二個元素os.path.exists()判斷文件夾、文件是否存在,返回的是布爾值:true、falseos.path.isabs()判斷路徑是否是絕對路徑,返回的是布爾值:true、falseos.path.isfile()判斷是否是文件,返回的是布爾值:true、falseos.path.isdir()判斷是否是目錄,返回的是布爾值:true、falseos.path.join()將多個路徑組合返回一個路徑os.path.getsize()獲取返回的是文件內容字符串的長度os.walk()獲取遞歸目錄,返回的是一個三元組(根目錄, 目錄, 文件)os.getcwd()

說明:獲取當前工作目錄.

>>> os.getcwd()
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37'

os.chdir()

說明:改變當前工作目錄(切換目錄).

# 字符串前面加個r,讓裡面符號不轉義
>>> os.chdir(r"E:\01 Network\07 Program\python\test")

# 當前工作目錄已切換
>>> os.getcwd()
'E:\\01 Network\\07 Program\\python\\test'

os.makedirs()

說明:可創建多級目錄.

>>> os.makedirs("test1/test11")

os.removedirs()

說明:可遞歸刪除空目錄,一定都是==空目錄==才能刪除.

>>> os.removedirs("test1/test11")

如果不是空目錄,則會報錯

OSError: [WinError 145] 目錄不是空的。: 'test1/test11'

os.mkdir()

說明:創建單級目錄.

>>> os.mkdir("test1")

如果創建多級不存在目錄或者已存在目錄創建,都會報錯:

>>> os.mkdir("test1/test11")
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    os.mkdir("test1/test11")
FileNotFoundError: [WinError 3] 系統找不到指定的路徑。: 'test1/test11'

os.rmdir()

說明:刪除單級空目錄.

>>> os.rmdir("test1")

如果目錄不為空,則會報錯

>>> os.rmdir("test1")
Traceback (most recent call last):
  File "<pyshell#85>", line 1, in <module>
    os.rmdir("test1")
OSError: [WinError 145] 目錄不是空的。: 'test1'

os.listdir()

說明:列出當前目錄下的文件夾、文件及隱藏文件.

>>> os.listdir()
['.git', '.idea', 'book', 'network', 'new_test.txt', 'test1', 'venv', '__pycache__']

os.remove()

說明:刪除文件.

>>> os.remove("test1/test1.txt")

如果文件不存在,則會報錯:

>>> os.remove("test1/test1.txt")
Traceback (most recent call last):
  File "<pyshell#133>", line 1, in <module>
    os.remove("test1/test1.txt")
FileNotFoundError: [WinError 2] 系統找不到指定的文件。: 'test1/test1.txt'

os.rename()

說明:重命名文件或文件夾.

>>> os.rename("test1/test1.txt", "test1/test11.txt")
>>> os.listdir("test1")
['test11', 'test11.txt', 'test12'] # 已經變成了test11.txt

os.stat()

說明:獲取文件或文件夾信息.

# 目錄信息
>>> os.stat("test1")
os.stat_result(st_mode=16895, st_ino=2533274791006554, st_dev=3243071515, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1630948576, st_mtime=1630948538, st_ctime=1630947394)

# 文件信息
>>> os.stat("test1/test11.txt")
os.stat_result(st_mode=33206, st_ino=562949954031987, st_dev=3243071515, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1630948524, st_mtime=1630948524, st_ctime=1630948489)

os.path.abspath()

說明:獲取文件或文件夾的絕對路徑.

# 輸入文件名,可以獲取絕對路徑
>>> os.path.abspath("test1/test11.txt")
'E:\\01 Network\\07 Program\\python\\test\\test1\\test11.txt'

os.path.split()

說明:將路徑分割成以文件夾和文件名的二元組.

# 元組第一個元素是文件夾,第二個元素是文件名
>>> os.path.split("test1/test11.txt")
('test1', 'test11.txt')

如果文件夾為空,則返回空字符串、文件夾二元組:

>>> os.path.split("test1")
('', 'test1')

os.path.dirname()

說明:返回的是路徑中目錄名,可以看作是split分割後的第一個元素.

>>> os.path.dirname("test1/test11.txt")
'test1'

os.path.basename()

說明:返回的是路徑中的文件名,可以看作是split分割後的第二個元素.

>>> os.path.basename("test1/test11.txt")
'test11.txt'

os.path.exists()

說明:判斷文件夾、文件是否存在,返回的是布爾值true或ffalse.

# 判斷目錄
>>> os.path.exists("test1")
True
# 判斷文件
>>> os.path.exists("test.txt")
True
# 可以判斷帶路徑的文件
>>> os.path.exists("test1/test11.txt")
True

這個方法我們是會經常用到的,我給大家舉例一下:

# 判斷是否存在文件,如不存在則創建一個文件,並寫入數據.
if filepath = r"E:\Network\Program\python\test\test.txt"
if os.path.exists(filepath) == False:
    with open(filepath, 'w') as f:
        f.write('hello world.')

os.path.isabs()

說明:判斷是否是絕對路徑,返回的是布爾值true或false.

# 不是絕對路徑,返回false
>>> os.path.isabs("test1")
False

# 先查看當前路徑
>>> os.getcwd()
'E:\\01 Network\\07 Program\\python\\test'
# 絕對路徑,返回True
>>> os.path.isabs(r"E:\\01 Network\\07 Program\\python\\test")
True

os.path.isfile()

說明:判斷是否是文件,返回的是布爾值true或false.

>>> os.path.isfile("test1/test11.txt")
True

os.path.isdir()

說明:判斷是否是目錄,返回的是布爾值true或false.

>>> os.path.isdir("test1")
True
>>> os.path.isdir("test2")
False

os.path.join()

說明:將多個路徑組合返回一個路徑.

>>> os.path.join("test", "test1")
'test\\test1'

os.path.getsize()

說明:返回的是文件內容字符串的長度

# 文件內容寫的是:hello world.
>>> os.path.getsize("test.txt")
12

os.walk

說明:可以對目錄進行遞歸,返回的是一個三元組(父目錄, 子目錄, 文件)

方法walk(top, topdown=True, onerror=None, followlinks=False):

√topdown=True:默認遍歷遞歸從上到下.

√onerror=None:默認不調用任何函數.

√followlinks=False:默認不遍歷超連接;

舉個小慄子:

try:
    for root, dirs, files in os.walk(path):
        print('-' * 50 + "根目錄" + '-' * 50)
        print(root)
        print('-' * 50 + "目錄" + '-' * 50)
        print(dirs)
        print('-' * 50 + "文件" + '-' * 50)
        print(files)
except Exception as e:
    print(e)

運行結果如下所示:

舉例一個常用的例子,通過os.walk()遍歷目錄,zipfile壓縮打包:

import os
import zipfile
from datetime import datetime

path = r"E:\01 Network\07 Program\python\test\walk"
LogTime = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")

try:
    with zipfile.ZipFile(LogTime + ".zip", 'w') as zip:
        zip_list = []
        for root, dirs, files in os.walk(path):
            for file in files:
                zip_list.append(os.path.join(root, file))
            for dir in dirs:
                zip_list.append(os.path.join(root, dir))
        for i in zip_list:
            zip.write(i, i.replace(path, ''))
except Exception as e:
    print(e)

運行後結果如下所示:

運行腳本和壓縮後的文件包都在同一個路徑。

打開壓縮包,驗證下目錄結構

今天分享python內置模塊os到此就結束了,後期也會連載其他內置模塊或第三方模塊.

如果大家需要深入研究的請參考官方文檔。

連結:os模塊
https://docs.python.org/zh-cn/3.6/library/os.html

相關焦點

  • Python內置模塊os介紹
    # 內置模塊# Python語言強大的地方就在於它擁有非常強大的模塊系統# 使用只需要用 import 導入即可
  • Python內置OS模塊用法詳解
    作者:是甜甜呢來源:早起PythonPython內置OS模塊用法詳解
  • Python os 模塊
    引言眾所周知,python是一種強大的腳本語言,那麼,問題來了,為什麼不用python來編寫Linux腳本呢?
  • 【python】os 模塊使用筆記
    Python內置的os模塊可以調用作業系統提供的接口函數,對文件或目錄進行操作(實際上作業系統是不允許應用程式直接訪問和操作文件和目錄的,讀寫文件就是請求作業系統打開一個文件對象,通常稱為文件描述符。註:如果是posix,作業系統是linux,Unix,Mac OS X.如果是nt,作業系統則是windows。
  • Python OS模塊簡介
    Python允許開發人員通過Python中的os模塊使用多個依賴於作業系統的功能。這個包抽象了平臺的功能,並提供了相關python函數來導航、創建、刪除和修改文件和文件夾。在本教程中,你將了解如何導入這個包、它的基本功能以及使用這個庫執行數據合併任務的python示例項目。基本函數我們通過一些實例代碼來學習一下這個模塊。
  • Python之OS模塊39個常用函數詳解
    OS,語義作業系統,所以該模塊就是作業系統相關的功能了,用於處理文件和目錄這些我們日常手動需要做的操作,比如新建文件夾、獲取文件列表、刪除某個文件、獲取文件大小、重命名文件、獲取文件修改時間等,該模塊就包含了大量的作業系統操作函數,精選常用的進行解析,希望對大家有所幫助。
  • 【Python入門】Python之OS模塊39個常用函數詳解
    os,語義作業系統,所以該模塊就是作業系統相關的功能了,用於處理文件和目錄這些我們日常手動需要做的操作,比如新建文件夾、獲取文件列表、刪除某個文件、獲取文件大小、重命名文件、獲取文件修改時間等,該模塊就包含了大量的作業系統操作函數,精選常用的進行解析,希望對大家有所幫助。
  • Python os模塊 常用的功能介紹
    Python os 模塊提供了非常豐富的方法用來處理文件和目錄。使用者不需要關注什麼作業系統就可以對文件進行操作。
  • Python基礎之模塊之os模塊
    os.getcwd()      #顯示當前python腳本工作路徑os.sep#顯示當前平臺下路徑分隔符os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"os.pardir 獲取當前目錄的父目錄字符串名:('..')
  • Python安全開發之系統模塊【C06課】
    掌握os模塊掌握time模塊掌握random模塊了解python的內置模塊,也可以說內置庫,這些模塊能用簡單的幾行代碼完成複雜的業務邏輯。你可以理解成有人幫你完成了複雜的工程配置,你只需要簡單的調用就可以。就比如有人幫你組裝好了飛天無敵霹靂鐳射機關槍,你只需要記住如何按動扳機就可以打槍一樣。
  • 二十七、深入淺出Python中的os模塊
    osOS模塊簡單的來說它是一個Python的系統編程的操作模塊,可以處理文件和目錄這些我們日常手動需要做的 操作。可以查看OS模塊的幫助文檔。import os #導入os模塊  help(os)   #查看os模塊幫助文檔,裡面詳細的模塊相關函數和使用方法獲取當前系統首先我們需要先導入os模塊:直接列印os.name。
  • Python常用模塊os和shutil學習
    os就是「operating system」的縮寫,python中的os模塊提供了對目錄或者文件的新建/刪除/查看等屬性,還提供了對文件以及目錄的路徑操作,比如創建、刪除目錄等。關於OS模塊的目錄操作,可以看一下這篇文章:Python目錄操作總結下面是os模塊常用方法思維導圖shutil模塊shutil模塊屬於高級文件操作模塊,可以做os模塊的補充,主要可以實現文件的複製和解壓縮操作等等。
  • Python3_模塊(一)
    為此 Python提供了一個辦法,把這些定義存放在文件中,為一些腳本或者交互式的解釋器實例使用,這個文件被稱為模塊。模塊是一個包含所有你定義的函數和變量的文件,其後綴名是.py。模塊可以被別的程序引入,以使用該模塊中的函數等功能。這也是使用 python標準庫的方法。簡單的來說,模塊,是用一段代碼實現了某個功能的代碼集合,本質上是一個py文件。
  • Python|模塊os
    Python語言中有很多經常用到的標準包,提到包,我們就不得不聯想到模塊。模塊和包有啥區別呢?
  • Python內置模塊math介紹
    # 導入模塊import math#dir(module):可以通過它查看任何模塊中所包含的工具
  • python---os模塊使用詳解
    os模塊調用作業系統接口的模塊  相關方法或屬性:    getcwd()
  • python 模塊導入詳解
    python 模塊導入詳解在寫python代碼時經常會導入一些內置模塊、第三方模塊或者自己目錄下寫的模塊
  • Python系列特別篇-模塊
    gt; print(ts(d.fib(10), 5))[3, 4]Python腳本(模塊)可以通過python命令直接執行,同時還可以傳入參數,方法:python demo.py [arguments],這裡的參數是可選的,看程序的需求,參數的接收是通過Python的內置模塊sys完成的。
  • Python內置模塊sys介紹
    # 導入模塊import sys# sys模塊用來處理Python運行時配置以及資源,從而可以與當前程序之外的系統環境交互
  • python sys模塊的常見用法匯總
    python的內置模塊sys,提供了系統相關的一些變量和函數,在實際開發中,常見的有以下幾種用法1.