對於學Python的人來說想必大家os這個模塊不會陌生,還有一個與之緊密相關的便是sys,但是sys一般很少用,所以今天我們就來說說這兩個模塊到底有哪些神器的功能。
/sys/
sys模塊包括了一組非常實用的服務,內含很多函數方法和變量,
用來處理Python運行時配置以及資源,從而可以與前當程序之外的系統環境交互。
也就是說他是一個很有用的模塊,只是我們平時很少用到而已。
#命令行參數List,第一個元素是程序本身路徑
sys.argv
#返回系統導入的模塊字段,key是模塊名,value是模塊
sys.modules
#退出程序,正常退出時exit(0)
sys.exit(n)
#返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.path
#標準輸出
sys.stdout.write('output')
#標準輸入
sys.stdin.readline()[:-1]
#返回所有已經導入的模塊名
sys.modules.keys()
#返回所有已經導入的模塊
sys.modules.values()
#獲取當前正在處理的異常類,exc_type、exc_value、exc_traceback當前處理的異常詳細信息
sys.exc_info()
#獲取Python解釋程序的版本值,16進制格式如:0x020403F0
sys.hexversion
#獲取Python解釋程序的版本
sys.version
#解釋器的C的API版本
sys.api_version
#解釋器版本信息 返回major=3, minor=6, micro=6, releaselevel='final', serial=0
#‘final’表示最終,也有’candidate’表示候選,serial表示版本級別,是否有後繼的發行
sys.version_info
#如果value非空,這個函數會把他輸出到sys.stdout,並且將他保存進__builtin__._.指在python的交互式解釋器里,’_’ 代表上次你輸入得到的結果,hook是鉤子的意思,將上次的結果鉤過來
sys.displayhook(value)
#打印出給定的回溯和異常sys.stderr。
sys.excepthook(type,value,callback)
#返回當前你所用的默認的字符編碼格式
sys.getdefaultencoding()
#返回將Unicode文件名轉換成系統文件名的編碼的名字
sys.getfilesystemencoding()
#用來設置當前默認的字符編碼,如果name和任何一個可用的編碼都不匹配,拋出 LookupError,這個函數只會被site模塊的sitecustomize使用,一旦別site模塊使用了,他會從sys模塊移除
sys.setdefaultencoding(name)
#Python解釋器導入的模塊列表
sys.builtin_module_names
#Python解釋程序路徑
sys.executable
#獲取Windows的版本
sys.getwindowsversion()
#記錄python版權相關的東西
sys.copyright
#本地字節規則的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’
sys.byteorder
#用來清除當前線程所出現的當前的或最近的錯誤信息
sys.exc_clear()
#返回平台獨立的python文件安裝的位置
sys.exec_prefix
#錯誤輸出
sys.stderr
#標準輸入
sys.stdin
#標準輸出
sys.stdout
#返回操作系統平台名稱
sys.platform
#最大的Unicode值
sys.maxunicode
#最大的Int值
sys.maxint
#呼叫func(*args),同時啟用跟蹤。跟蹤狀態被保存,然後恢復。
#這是從調試器從檢查點調用,以遞歸調試其他一些代碼。
sys.call_tracing(func,args )
#清除內部類型緩存。類型緩存用於加速屬性和方法查找
sys._clear_type_cache()
#返回一個字典,將每個線程的標識符映射到調用該函數時該線程中當前活動的最頂層堆棧幀。
sys._current_frames()
#指定Python DLL句柄的整數。
sys.dllhandle
#如果這是真的,Python將不會嘗試在源模塊的導入上編寫.pyc或.pyo文件。
#此值最初設置為True或 False取決於-B命令行選項
#和 PYTHONDONTWRITEBYTECODE 環境變量,但您可以自己設置它來控制字節碼文件的生成。
sys.dont_write_bytecode
#獲取檢查間隔
sys.getcheckinterval()
#返回用於dlopen()調用的標誌的當前值。標誌常量在dl和DLFCN模塊中定義。可用性:Unix。
sys.getdlopenflags()
#返回對象的引用計數。返回的計數通常比您預期的高一個,因為它包含(臨時)引用作為參數getrefcount()。
sys.getrefcount(對象)
#以字節為單位返回對象的大小。對象可以是任何類型的對象。所有內置對象都將返回正確的結果,但這不一定適用於第三方擴展,因為它是特定於實現的。
#如果給定,則如果對象未提供檢索大小的方法,則將返回default。否則TypeError將被提出。
#如果對象由垃圾收集器管理,則調用該對象的方法並添加額外的垃圾收集器開銷。
sys.getsizeof(對象[,默認] )
#從調用堆棧返回一個框架對象。如果給出了可選的整數深度,
#則返回堆棧頂部下方多次調用的幀對象。如果它比調用堆棧更深,
#ValueError則引發。深度的默認值為零,返回調用堆棧頂部的幀。
sys._getframe([ 深度] )
#獲取設置的探查器功能setprofile()。
sys.getprofile()
#獲取設置的跟蹤功能settrace()。
sys.gettrace()
#返回一個描述當前正在運行的Windows版本的命名元組
sys.getwindowsversion()看到這麼多方法大家是不是已經哭暈在廁所里了了,不着急,
小編在這裡先給大家一個練手的好案例讓大家開開葷:

那麼這個案例實現的是什麼功能了,大致就是每隔一秒打印一個#,好像進度條一樣的說。
在這裡就用到標準輸出流和輸出流刷新了,也算是超級簡單的進度條了。
sys裡面有幾個可以表示腳本當前路徑的函數,可以說是非常強大了,比如說:

大家可以看到,後面兩個結果相同,說明後面兩個效果一樣嗎,那可不一定。
不信,你可以看看我接下來的操作,讓你懷疑人生:
創建兩個py文件,你懂的,然後分別鍵入代碼:
#cg.py
import sys
def ff():
print(sys.path[0],':',sys.argv[0],':',__file__)
#sys.argv[0] 一般得到的是相對路徑
ff()
#fd.py
import cg
cg.ff()
可以看到,最後的結果就是顯然不一樣了,那麼這是什麼原因產生的了,哦,
原來,在fd中導入cg執行的sys.argv[0]還是指的是運行的主文件fd.py,而file卻輸出的是cg.py.
順便跟大家科普一下查看模塊下有哪些方法的一個函數:dir()

所有的函數都打印出來了,當然,如果你想快速了解每個方法的用法,則可以使用help()函數:

可以說是很強大了。
接下來我們再來說說另一個非常牛逼的東西———os。
/OS/
一、文件操作(os直屬常用方法)
# 關閉文件描述符 hw
os.close(hw)
# 關閉所有文件描述符,從 hw1(包含) 到 hw2(不包含), 錯誤會忽略
os.closerange(hw1,hw2)
# 通過文件描述符改變當前工作目錄
os.fchdir(hw)
# 改變一個文件的訪問權限,該文件由參數hw指定,參數mode是Unix下的文件訪問權限。
os.fchmod(hw, mode)
# 修改一個文件的所有權,這個函數修改一個文件的用戶ID和用戶組ID,該文件由文件描述符hw指定。
os.fchown(hw, id1, id2)
# 強制將文件寫入磁盤,該文件由文件描述符hw指定,但是不強制更新文件的狀態信息。
os.fdatasync(hw)
#通過文件描述符hw 創建一個文件對象,並返回這個文件對象
os.fdopen(hw[, mode[, bufsize]])
#返回一個打開的文件的系統配置信息。name為檢索的系統配置的值,
#它也許是一個定義系統值的字符串,這些名字在很多標準中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
os.fpathconf(hw, name)
#返迴文件描述符hw的狀態,像stat()。
os.fstat(hw)
#返回包含文件描述符hw的文件的文件系統的信息,像 statvfs()
os.fstatvfs(hw)
#強制將文件描述符為hw的文件寫入硬盤。
os.fsync(hw)
#裁剪文件描述符hw對應的文件, 所以它最大不能超過文件大小。
os.ftruncate(hw,length)
#複製文件描述符hw
os.dup(hw)
# 將一個文件描述符hw複製到另一個hw1
os.dup2(hw,hw1)
# 返回與終端hw(一個由os.open()返回的打開的文件描述符)關聯的進程組
os.tcgetpgrp(hw)
# 設置與終端hw(一個由os.open()返回的打開的文件描述符)關聯的進程組為hw1。
os.tcsetpgrp(hw, hw1)
# 返回唯一的路徑名用於創建臨時文件。
os.tempnam([dir[, prefix]])
# 返回一個打開的模式為(w+b)的文件對象 .這文件對象沒有文件夾入口,沒有文件描述符,將會自動刪除。
os.tmpfile()
# 為創建一個臨時文件返回一個唯一的路徑
os.tmpnam()
# 返回一個字符串,它表示與文件描述符hw 關聯的終端設備。如果hw 沒有與終端設備關聯,則引發一個異常。
os.ttyname(hw)
# 刪除文件路徑
os.unlink(path)
# 返回指定的path文件的訪問和修改的時間。
os.utime(path, times)
# 輸出在文件夾中的文件名通過在樹中遊走,向上或者向下。
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
# 寫入字符串到文件描述符hw中. 返回實際寫入的字符串長度
os.write(hw, str)
# 獲取指定路徑的文件系統統計信息
os.statvfs(path)
# 返回當前工作目錄
os.getcwd()
# 返回一個當前工作目錄的Unicode對象
os.getcwdu()
# 如果文件描述符hw是打開的,同時與tty(-like)設備相連,則返回true, 否則False。
os.isatty(hw)
# 設置路徑的標記為數字標記,類似 chflags(),但是沒有軟鏈接
os.lchflags(path, flags)
# 修改連接文件權限
os.lchmod(path, mode)
# 更改文件所有者,類似 chown,但是不追蹤鏈接。
os.lchown(path, uid, gid)
# 返回path指定的文件夾包含的文件或文件夾的名字的列表。
os.listdir(path)
# 設置文件描述符 fd當前位置為pos, how方式修改: SEEK_SET 或者 0
#設置從文件開始的計算的pos; SEEK_CUR或者 1 則從當前位置計算;
#os.SEEK_END或者2則從文件尾部開始. 在unix,Windows中有效
os.lseek(fd, pos, how)
# 打開一個文件,並且設置需要的打開選項,mode參數是可選的
os.open(file, flags[, mode])
# 打開一個新的偽終端對。返回 pty 和 tty的文件描述符。
os.openpty()
# 返回相關文件的系統配置信息。
os.pathconf(path, name)
# 用於分割文件路徑的字符串
os.pathsep
# 獲取當前目錄的父目錄字符串名:('..')
os.pardir
# 創建一個管道. 返回一對文件描述符(r, w) 分別為讀和寫
os.pipe()
# 從一個 command 打開一個管道
os.popen(command[, mode[, bufsize]])
# 字符串指示當前使用平台。win->'nt'; Linux->'posix'
os.name
# 從文件描述符hw中讀取最多n個字節,返回包含讀取字節的字符串,
#文件描述符hw對應文件已達到結尾, 返回一個空字符串。
os.read(hw, n)
#返迴路徑所在的根目錄,主目錄主文件
os.walk(path)
#返迴路徑下的目錄和文件
os.listdir(path)
#切換當前程序操作的路徑
os.chdir(path)
#重命名文件
os.rename(oldfile,newfile)二、路徑操作
#將文件路徑和文件名分割(會將最後一個目錄作為文件名而分離)
os.path.split(filename)
#將文件路徑和文件擴展名分割成一個元組
os.path.splitext(filename)
#返迴文件路徑的目錄部分
os.path.dirname(filename)
#返迴文件路徑的文件名部分
os.path.basename(filename)
#將文件路徑和文件名湊成完整文件路徑
os.path.join(dirname,basename)
#獲得絕對路徑
os.path.abspath(name)
#把路徑分割為掛載點和文件名
os.path.splitunc(path)
#規範path字符串形式
os.path.normpath(path)
#判斷文件或目錄是否存在
os.path.exists()
#如果path是絕對路徑,返回True
os.path.isabs()
#返回path的真實路徑
os.path.realpath(path)
#從start開始計算相對路徑
os.path.relpath(path[, start])
#轉換path的大小寫和斜杠
os.path.normcase(path)
#判斷name是不是一個目錄,name不是目錄就返回false
os.path.isdir()
#判斷name是不是一個文件,不存在返回false
os.path.isfile()
#判斷文件是否連接文件,返回boolean
os.path.islink()
#指定路徑是否存在且為一個掛載點,返回boolean
os.path.ismount()
#是否相同路徑的文件,返回boolean
os.path.samefile()
#返回最近訪問時間 浮點型
os.path.getatime()
#返回上一次修改時間 浮點型
os.path.getmtime()
#返迴文件創建時間 浮點型
os.path.getctime()
#返迴文件大小 字節單位
os.path.getsize()
#返回list(多個路徑)中,所有path共有的最長的路徑
os.path.commonprefix(list)
#路徑存在則返回True,路徑損壞也返回True
os.path.lexists
#把path中包含的”~”和”~user”轉換成用戶目錄
os.path.expanduser(path)
#根據環境變量的值替換path中包含的”$name”和”${name}”
os.path.expandvars(path)
#判斷fp1和fp2是否指向同一文件
os.path.sameopenfile(fp1, fp2)
#判斷stat tuple stat1和stat2是否指向同一個文件
os.path.samestat(stat1, stat2)
#一般用在windows下,返回驅動器名和路徑組成的元組
os.path.splitdrive(path)
#遍歷path,給每個path執行一個函數
os.path.walk(path, visit, arg)
#設置是否支持unicode路徑名
os.path.supports_unicode_filenames() 三、進程管理
# 創建一個軟鏈接
os.symlink(src, dst)
# 創建硬鏈接,名為參數 dst,指向參數 src
os.link(src, dst)
# 像stat(),但是沒有軟鏈接
os.lstat(path)
# 運行shell命令,直接顯示
os.system("bash command")
# 改變當前進程的根目錄
os.chroot(path)
#shell命令,不返回結果,但是可以進行讀取
os.popen(command).read()
# 當前平台使用的行終止符,win下為"tn",Linux下為"n"
os.linesep
#路徑連接符
os.sep
#從原始的設備號中提取設備major號碼 (使用stat中的st_dev或者st_rdev field)。
os.major(device)
# 以major和minor設備號組成一個原始設備號
os.makedev(major, minor)
# 遞歸文件夾創建函數。像mkdir(),但創建的所有intermediate-level文件夾需要包含子文件夾。
os.makedirs(path[, mode])
# 從原始的設備號中提取設備minor號碼(使用stat中的st_dev或者st_rdev field )。
os.minor(device)
# 以數字mode的mode創建一個名為path的文件夾.默認的 mode 是 0777 (八進制)。
os.mkdir(path[, mode])
# 創建命名管道,mode 為數字,默認為 0666 (八進制)
os.mkfifo(path[, mode])
# 創建一個名為filename文件系統節點(文件,設備特別文件或者命名pipe)。
os.mknod(filename[, mode=0600, device]) 四、環境參數
#檢驗權限模式
os.access(path, mode)
# 設置路徑的標記為數字標記。
os.chflags(path, flags)
# 更改權限
os.chmod(path, mode)
# 更改文件所有者
os.chown(path, uid, gid)
#獲得當前系統登陸用戶名
os.getlogin()
#獲得當前系統的CPU數量
os.cpu_count()
# 獲得n個字節長度的隨機字符串,通常用於加解密運算
os.urandom(n)
# 獲取系統所有環境變量
os.environ
#獲取某個特定的環境變量的值
os.getenv('CYGWIN')
os.environ.get('CYGWIN')
#設置環境變量
os.environ.setdefault(key,value)
#獲取某個特定的環境變量的值的byte形式
os.getenvb('CYGWIN')五、stat子庫
#獲取到的文件屬性列表
fileStats = os.stat(path)
#獲取文件的模式
fileStats[stat.ST_MODE]
#文件大小
fileStats[stat.ST_SIZE]
#文件最後修改時間
fileStats[stat.ST_MTIME]
#文件最後訪問時間
fileStats[stat.ST_ATIME]
#文件創建時間
fileStats[stat.ST_CTIME]
#是否目錄
stat.S_ISDIR(fileStats[stat.ST_MODE])
#是否一般文件
stat.S_ISREG(fileStats[stat.ST_MODE])
#是否連接文件
stat.S_ISLNK(fileStats[stat.ST_MODE])
#是否COCK文件
stat.S_ISSOCK(fileStats[stat.ST_MODE])
#是否命名管道
stat.S_ISFIFO(fileStats[stat.ST_MODE])
#是否塊設備
stat.S_ISBLK(fileStats[stat.ST_MODE])
#是否字符設置
stat.S_ISCHR(fileStats[stat.ST_MODE])6、一鍵死機
為什麼要說這個呢?完全是為了好玩,哈哈哈。
我們都知道os 能很輕鬆打開一個程序,只要你知道這個源程序根目錄的位置。
所以我們一般都會:
os.system('notepad') #打開記事本
os.system('start notepad')#打開記事本這樣可以很輕鬆打開一個記事本,那麼我們要想讓它無限打開。我給它整個死循環,給它個無限遞歸不就完了。是不是很簡單了?
還有一種比較優雅的打開程序的方法,那就是popen方法:
pp=os.popen('notebook')不僅如此,我們還能看到它執行結果後的返回值。
print(pp.read())
哈哈,也是很666了。
/小結/
1、本文基於Python編程語言,主要介紹了Python操作文件目錄的兩個大庫sys和os,在實際應用中十分的常用,希望大家了解。本文內容十分豐富,歡迎大家積極學習。
2、結合部分實際案例,圖文並茂,幫助大家更好的理解文件操作。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/226325.html
微信掃一掃
支付寶掃一掃