Python3中常用模塊-os模塊

目錄

1:獲取模塊幫助文檔

2:常用os模塊工具

      2.1:os模塊功能彙總

2.2:系統相關

2.3:文件和目錄相關

2.3.1:文件和目錄管理工具

2.4:運行程序

2.4.1:os.system

2.4.2:os.popen


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)


 

 

 

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