目錄
os模塊是Python標準庫中與操作系統交互及訪問操作系統相關功能的模塊。
1:獲取模塊幫助文檔
import os
# 1:查看os模塊的幫助
print(os.__doc__)
# 2:列出所有的屬性及方法
print(dir(os))
# 3:一行一個列出
for item in dir(os):
print(item )
# 4:查看某個函數
print(help(os.system))
2:常用os模塊工具
2.1:os模塊功能彙總
大類 | 小類 | 函數 | 說明 |
系統相關 | shell變量 | os.environ | 獲取系統環境變量 |
os.name | 查看當前操作系統的名稱。windows平臺下返回‘nt’,Linux則返回‘posix’。 | ||
移植相關 | os.sep | 當前平臺的路徑分隔符。在windows下,爲‘\’,在POSIX系統中,爲‘/’。 | |
os.pathsep | PATH環境變量中的分隔符,在POSIX系統中爲‘:’,在Windows中爲‘;’。 | ||
os.extsep | 文件名和文件擴展名之間分隔的符號,在Windows下爲‘.’。 | ||
os.linesep | 行結束符。在不同的系統中行尾的結束符是不同的,例如在Windows下爲‘\r\n’。 | ||
os.devnull | 在不同的系統上null設備的路徑,在Windows下爲‘nul’,在POSIX下爲‘/dev/null’。 | ||
os.defpath | 當使用exec函數族的時候,如果沒有指定PATH環境變量,則默認會查找os.defpath中的值作 | ||
文件和目錄相關 | 管理工具 |
os.getcwd() | 獲取當前工作目錄 |
os.chdir(r"C:\Program Files (x86)") | 改變當前腳本工作目錄; | ||
os.curdir | 返回當前目錄: ('.') | ||
os.pardir | 獲取當前目錄的父目錄:('..') | ||
os.mkdir('dirname') | 生成單級目錄 | ||
os.rmdir('dirname') | 刪除單級空目錄,若目錄不爲空則無法刪除並報錯 | ||
os.listdir(r"D:\python") | 列出指定目錄下的所有文件和子目錄(不包括子目錄下的子目錄),包括隱藏文件。 | ||
os.makedirs('dir1/dir2') | 可生成多層遞歸目錄 | ||
os.removedirs(‘dirname1’) | 遞歸刪除空目錄 | ||
os.stat('path/filename') | 獲取文件/目錄信息 | ||
os.chmod(path, mode) | 改變path的權限 | ||
os.mkfifo(path[, mode]) | 創建新的命名管道,並設置權限模式(以數字模式) | ||
os.access(path, mode); | 測試path是否存在,是否可讀,可寫,可執行。 | ||
os.getpid() | 獲取當前進程的進程id | ||
os.remove('filename') | 刪除一個文件 | ||
os.rename("oldname","new") | 重命名文件/目錄 | ||
路徑名工具 | os.path.exists(path或者file) | 檢測目錄或文件是否存在 | |
os.path.isdir(path) | 判斷目錄是否存在;目錄存在返回True,否則返回False | ||
os.path.isfile(file) | 判斷文件是否存在; | ||
os.path.abspath(path) | 返回path的絕對路徑;如os.path.abspath(os.curdir) | ||
os.path.isabs(path) | 判斷path是否是絕對路徑 | ||
os.path.split(path) | 將path分割成目錄和文件名二元組返回;(以path中最後一個os.sep爲分隔點) | ||
os.path.dirname(path) | 返回path中最後一個os.sep左邊的值。其實就是os.path.split(path)的第一個元素;(以path中最後一個os.sep爲分隔點) | ||
os.path.basename(path) | 返回path中最後一個os.sep右邊的值。os.path.split(path)的第二個元素;(以path中最後一個os.sep爲分隔點) | ||
os.path.join(path1[, path2[, ...]]) | 將多個路徑組合後返回(拼接路徑); | ||
os.path.getatime(path) | 最後存取時間 | ||
os.path.getmtime(path) | 最後修改時間 | ||
os.path.getsize(filename) | 文件包含的字符數量 | ||
os.walk(path) | 返回一個三元元組(dirpath, dirnames, filenames) | ||
運行程序 | os.system | 執行命令,阻塞方式執行,返回命令的退出狀態,不能獲取命令中輸出的結果 | |
os.popen | 執行命令,非阻塞,調用read才執行,可獲取命令中輸出結果,但不能獲取命令的退出狀態 | ||
os.startfile("test.py") | 打開一個任意類型的文件,與鼠標單擊它的圖標一樣 | ||
os.spawnv | 啓動帶有底層控制的新程序,可選os.P_WAIT,os.P_NOWAIT 阻塞與非阻塞方式。 | ||
os.execv | |||
os.execlp | |||
派生進程 | os.kill | ||
os.pipe | 管道,負責程序間通信 | ||
os.waitpid | |||
文件描述符 | os.open | ||
os.read | |||
os.write | |||
os.dup2 |
2.2:系統相關
print("1:",os.name)
print("2:",os.sep)
print("3:",os.pathsep)
print("4:",os.extsep)
print("5:",os.linesep)
print("6:",os.devnull)
print("7:",os.defpath)
"""
輸出結果(win10操作系統):
1: nt
2: \
3: ;
4: .
5:
6: nul
7: .;C:\bin
"""
2.3:文件和目錄相關
2.3.1:文件和目錄管理工具
# encoding=gbk
import os
print('--1--','*'*50)
print(os.getcwd()) # 獲取當前工作目錄
print(os.chdir(r"C:\Program Files (x86)")) # 改變當前工作目錄,os.chdir的返回值爲None
print(os.getcwd()) # 輸出是os.chdir 改變的工作目錄
print(os.chdir(r"..")) # 改變當前工作目錄爲上級目錄
print(os.getcwd()) #
print(os.curdir) # 輸出 .
print(os.pardir) # 輸出 ..
print('--2--','*'*50)
print(os.chdir(r"D:\python\test")) # 改變當前目錄爲
print(os.getcwd())
# print(os.mkdir(r'dir5')) # 在當前工作目錄下創建目錄,不能同時創建多級目錄,返回值爲None;當目錄存在時會拋出異常:FileExistsError
# print(os.rmdir('dir3')) # 在當前工作目錄下刪除指定目錄,也可以指定絕對目錄,返回值爲None;當目錄不存在時 拋出異常:FileNotFoundError
print(os.listdir(r"D:\python\test")) # 列出當前目錄下的所有目錄及文件,不包含其子目錄下的目錄,文件;
# print(os.makedirs('dir6/dir8')) # 創建多級目錄,當最後一級目錄存在時,拋出異常:FileExistsError
# print(os.removedirs('dir6/dir5')) # 刪除多級目錄:最後一級目錄不存在時,拋出FileNotFoundError;最後一級存在,首先刪除最後一級目錄,如上一級下沒有子目錄,就把上一級刪除,否則不刪除
print(os.remove('filename')) # 刪除文件,文件不存在拋出異常:FileNotFoundError
print(os.rename("ixusy88-1.txt","ixusy88-new.txt")) # 修改文件名;FileNotFoundError
print(os.stat(r"D:\python\test")) # 查看目錄的信息:大小,創建時間,修改時間等等。
print(os.stat(r"D:\python\test\ixusy88.txt")) # 查看文件的信息:大小,創建時間,修改時間等等。
print(os.getpid()) # 獲取進程id
2.3.2:路徑名工具
# encoding=gbk
import os
print(os.chdir(r"D:\python\test")) # 改變當前目錄爲 D:\python\test
print(os.getcwd())
print(os.path.exists(r"D:\python\test1")) # 判斷目錄是否存在
print(os.path.exists(r"D:\python\test1\ixusy88.txt")) # 判斷文件是否存在
print(os.path.isdir(r"D:\python\test\dir1")) # 判斷目錄是否存在:目錄存在返回True,其他情況返回False
print(os.path.isfile(r"D:\python\test\dir1")) # 判斷文件是否存在:文件存在返回True,其他情況返回False
print(os.path.abspath(r"dir1")) # 返回dir1的絕對路徑
print(os.path.isabs(r"dir1")) # 判斷是否是絕對路徑
print(os.path.isabs(r"D:\python\test\dir1")) # 判斷是否是絕對路徑
# 以路徑中最後一個os.sep對路徑進行分割,如下:
print(os.path.split(r"D:\python\test\dir1\ddd.txt")) # 輸出 :('D:\\python\\test\\dir1', 'ddd.txt')
print(os.path.split(r"D:\python\test\dir1\\")) # 輸出:('D:\\python\\test\\dir1', '')
print(os.path.split(r"D:\python\test\dir1")) # 輸出:('D:\\pytho n\\test', 'dir1')
#
print(os.path.dirname(r"D:\python\test\dir1\ddd.txt")) # 輸出 : D:\python\test\dir1
print(os.path.dirname(r"D:\python\test\dir1\\")) # 輸出:D:\python\test\dir1
print(os.path.dirname(r"D:\python\test\dir1")) # 輸出: D:\python\test
print(os.path.basename(r"D:\python\test\dir1\ddd.txt")) # 輸出 :ddd.txt
print(os.path.basename(r"D:\python\test\dir1\\")) # 輸出: 空的
print(os.path.basename(r"D:\python\test\dir1")) # 輸出: dir1
ret = os.path.join('dir11','dir12','dir113')
print(ret) # 輸出 dir11\dir12\dir113
ret = os.path.join(os.getcwd(),'dir11','dir12','dir113')
print(ret) # 輸出 D:\python\test\dir11\dir12\dir113
print(os.path.getatime(os.getcwd()))
print(os.path.getmtime(os.getcwd()))
print(os.path.getsize(os.getcwd()))
print('*' * 60)
# os.walk 遞歸列出目錄下的所有目錄,文件,及子目錄下的目錄文件。
for item in os.walk(os.getcwd()):
print(item)
上面os.walk的運行結果如下:
2.4:運行程序
2.4.1:os.system
# encoding=gbk
import os
# 執行命令,能在命令行中執行的命令
# 阻塞的方式執行,能獲取命令執行的退出狀態,不能獲取命令執行過程中的輸出。
print(os.system('ipconfig')) #
print(os.system('ping blog.csdn.net')) #
print(os.system('msconfig')) # 打開系統配置,程序會一直卡在這裏,直到關閉配置界面,
# 運行程序,不會阻塞
print(os.system('calc')) # 打開計算器
print(os.system('start calc'))
print(os.system('start C:\FeiQ.exe'))
# 打開文件,會阻塞
print(os.system('wifi.txt'))
print(os.system('wifi2.txt'))
"""
# 測試os.system的返回值:
在同級目錄下創建:test.py文件
import sys
print('in test ')
sys.exit(3)
"""
print(os.system('python test.py')) # 此處的輸出爲 3,即os.system的返回值爲所執行命令的退出(終止)狀態碼
2.4.2:os.popen
os.popen會打開一個管道。 其執行是非阻塞的,其返回一個可迭代對象,可以像讀取文件一樣,讀取命令的輸出結果。
語法格式:
os.popen(cmd, mode='r', buffering=-1)
參數說明:
command --- 調用的命令;
mode --- 模式權限可以是 'r'(默認) 或 'w';
bufsize -- 指明瞭文件需要的緩衝大小:0意味着無緩衝;1意味着行緩衝;其它正值表示使用參數大小的緩衝(大概值,以字節爲單位);負的bufsize意味着使用系統的默認值。
# encoding=gbk
import os
cmd = 'ipconfig'
ret = os.popen(cmd)
# 這個迭代器,只能迭代一遍:
# 1:讀取所有行,返回一個列表
# print(ret.readlines())
# 2:讀取所有行,返回一個字符串;read會阻塞
# str = ret.read()
# print(type(str),str)
# 3:迭代一次讀取一行
# for item in ret:
# print(item)
# print('*'*10)
# 上面的1:,2:,3:只會有一個輸出
# 最後關閉,
ret.close()
print('='*30)
# 也可以使用 with來執行
with os.popen(cmd) as p:
for item in p:
print(item)
print('*'*20)