首頁 > 軟體

python中os模組和sys模組的使用詳解

2023-08-28 18:05:17

一、os模組

os.getcwd() 獲取當前的工作目錄

os.chdir(‘絕對路徑/相對於當前工作目錄的路徑’) 改變工作目錄,相當於shell的cd命令,例如Windows平臺下os.chdir(r’D:PythonScriptstestc’),用r對進行跳脫,第一層級必須使用雙斜線,其他層級可以單斜線也可以雙斜線,在linux和unix平臺下用/分割

  • os.curdir  返回當前路徑 .
  • os.pardir  返回當前路徑的上一層路徑,即 ..
  • os.mkdir('dir')  生成單級目錄
  • os.makedirs(r'dir1dir2') 建立遞迴目錄,不加絕對路徑表示在當前工作目錄下建立
  • os.rmdir('dir')  刪除單級空目錄,如果目錄不為空無法刪除
  • os.removedirsr('dir1dir2')  若目錄為空則刪除,並遞迴到上一層目錄,若上一層為空也刪除,以此類推
  • os.listdir(dir)  列出指定目錄下的所有一級檔案和目錄,並以列表形式列印
  • os.remove('file')  刪除一個檔案
  • os.rename('oldname','newname')  重新命名檔案或目錄
  • os.listdir('dir')以列表形式列出dir目錄下所有的檔案和目錄
  • os.stat('file'/'dir')  獲取檔案/目錄的大小,連結數,建立時間,上一次修改、存取時間等資訊
  • os.sep  獲取當前環境的分隔符
  • os.linesep  獲取當前環境的換行符,windows下為/r/n,linux下為/n
  • os.pathsep  獲取當前環境分割檔案路徑的字串,windows下為;,linux下為:
  • os.name  獲取當前使用平臺,windows為nt,linux為posix
  • os.environ 獲取系統環境變數
  • os.system(shell command)  執行shell命令,返回執行狀態碼,執行結果顯示到螢幕
  • os.path.abspath(path)  返回絕對路徑
  • os.path.split(path)  將path分割成目錄和檔名的兩個元素的元組
  • os.path.dirame(path)  返回path的目錄,相當於os.path.split(path)的第一個元素
  • os.path.basename(path)  返回path最後的檔名,如果path以/或結尾則返回空值,即os.path.split(path)的第二個元素
  • os.path.exists(path)  如果path存在則返回True,否則返回False
  • os.path.isabs(path)  如果path是絕對路徑則返回True,否則返回False
  • os.path.isfile(path)  如果path是一個存在的檔案則返回True,否則返回False
  • os.path.isdir(path)   如果path是一個存在的目錄則返回True,否則返回False 
  • os.path.join(path1[,path2[,path3…]])  將多個路徑組合後返回,第一個絕對路徑之前的引數將被忽略
  • os.path.getatime(path)  獲取path所指向的檔案或者目錄的最後存取時間
  • os.path.getmtime(path)  獲取path所指向的檔案或者目錄的最後修改時間

二、os模組中的os.walk()函數

os.walk(‘path’)函數對於每個目錄返回一個三元組,(dirpath, dirnames, filenames),

第一個是路徑,第二個是路徑下面的目錄,第三個是路徑下面的檔案

如果加引數topdown=False則表示自下而上進行遍歷,預設為topdown=True即自上而下進行遍歷

#對於上述結構,os.walk()的結果為
['dir', ['dir1', 'dir2'], ['file1.txt', 'file2.txt']]
['dir\dir1', ['dir11', 'dir12'], []]
['dir\dir1\dir11', [], ['file111.txt']]
['dir\dir1\dir12', [], []]
['dir\dir2', ['dir21'], ['file21.txt']]
['dir\dir2\dir21', [], []]

#可通過如下指令碼驗證
import sys
l=[]
for root,dirs,files in os.walk('dir'):
    l.append(root)
    l.append(dirs)
    l.append(files)
    print(l)
    l=[]

結果分析

1.先以給定的目錄作為根目錄進行遍歷,讀取根目錄的資料夾和檔案

2.以根目錄下子目錄為新的根目錄進行遍歷,讀取其下面的資料夾和檔案

3.再以2中得到的子目錄為根目錄進行遍歷,讀取其下面的資料夾和檔案

4.重複3,直至所有子目錄下面沒有子目錄和檔案

三、sys模組

  • sys.path 獲取python PATH環境變數的值
  • sys.version 獲取python直譯器的版本
  • sys.exit(n) 在程式執行過程中退出程式,正常退出為exit(0)
  • sys.argv 返回的結果為一個列表且各元素都為字串,第一個元素為當前執行檔案的名稱,後面的元素為執行檔案時傳入的引數,以空格分隔各引數,如果只有空格表示沒有引數。
[root@oldboy test]# cat argv.py 
import sys
print(sys.argv)
[root@oldboy test]# python argv.py 
['argv.py']
[root@oldboy test]# python argv.py 11 '22' [33,44] 'True' {1:'a'}#檔案執行時傳入的引數不能為元組,否則會報錯
['argv.py', '11', '22', '[33,44]', 'True', '{1:a}']

sys.stdout.write(‘str’) 向螢幕輸出,不換行,相當於print,但是print(‘str’)是換行輸出

sys.stdout.flush( ) 將快取輸出到螢幕

例如通過#逐步列印進度條

import time,sys
for i in range(20):
    sys.stdout.write('#')  #列印一個#,不換行
    time.sleep(0.1)  #睡0.1秒再輸出下一個#
    sys.stdout.flush()  #將快取中的#輸出到螢幕,沒有這一行系統會等到輸出完畢再將快取中的20個#輸出到螢幕
print('')

解析檔案執行時輸入的引數:optparse模組

import optparse
class ArgvHandle():
    def __init__(self):
        self.op = optparse.OptionParser()
        self.op.add_option('-s','--server',dest = 'server')
        #,前面為檔案執行時的輸入,dest表示引數名。如果檔案執行時帶有-s或者--server,則形成引數名稱為dest指定名稱、引數值為-s或者--server後面緊跟著的內容
        self.op.add_option('-P','--port',dest = 'port')
        self.op.add_option('-u','--username',dest = 'username')
        self.op.add_option('-p','--passwort',dest = 'password')
        #學習中遇到問題沒人解答?小編建立了一個Python學習交流群:725638078

        option,args = self.op.parse_args()
        print(type(option),type(args))
        print(option,args)           
       print(option.server,option.port,option.username,option.password)#通過.取引數名對應的值

test = ArgvHandle()

隨意輸入引數執行結果如下

可知op.parse_args()是將檔案執行python mani.py後面的引數分割成兩部分,一部分類似字典的形式(實際是一個物件),一部分是一個列表。

如果匹配到add_option定義的引數形式,則將後面緊跟著的輸入作為引數的值;未匹配到add_option定義的引數形式的其餘輸入被整理到一個列表中。

到此這篇關於python中os模組和sys模組的使用詳解的文章就介紹到這了,更多相關python os模組和sys模組內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com