Python文件目錄操作就是這么6
/前言/
對于學(xué)Python的人來說想必大家os這個(gè)模塊不會(huì)陌生,還有一個(gè)與之緊密相關(guān)的便是sys,但是sys一般很少用,所以今天我們就來說說這兩個(gè)模塊到底有哪些神器的功能。
/sys/
sys模塊包括了一組非常實(shí)用的服務(wù),內(nèi)含很多函數(shù)方法和變量,
用來處理Python運(yùn)行時(shí)配置以及資源,從而可以與前當(dāng)程序之外的系統(tǒng)環(huán)境交互。
也就是說他是一個(gè)很有用的模塊,只是我們平時(shí)很少用到而已。
sys.argvsys.modulessys.exit(n)sys.pathsys.stdout.write('output')sys.stdin.readline()[:-1]sys.modules.keys()sys.modules.values()sys.exc_info()sys.hexversionsys.versionsys.api_versionsys.version_infosys.displayhook(value)sys.excepthook(type,value,callback)sys.getdefaultencoding()sys.getfilesystemencoding()sys.setdefaultencoding(name)sys.builtin_module_namessys.executablesys.getwindowsversion()sys.copyrightsys.byteordersys.exc_clear()sys.exec_prefixsys.stderrsys.stdinsys.stdoutsys.platformsys.maxunicodesys.maxintsys.call_tracing(func,args )sys._clear_type_cache()sys._current_frames()sys.dllhandlesys.dont_write_bytecodesys.getcheckinterval()sys.getdlopenflags()sys.getrefcount(對象)sys.getsizeof(對象[,默認(rèn)] )sys._getframe([ 深度] )sys.getprofile()sys.gettrace()sys.getwindowsversion()
看到這么多方法大家是不是已經(jīng)哭暈在廁所里了了,不著急,
小編在這里先給大家一個(gè)練手的好案例讓大家開開葷:

那么這個(gè)案例實(shí)現(xiàn)的是什么功能了,大致就是每隔一秒打印一個(gè)#,好像進(jìn)度條一樣的說。
在這里就用到標(biāo)準(zhǔn)輸出流和輸出流刷新了,也算是超級(jí)簡單的進(jìn)度條了。
sys里面有幾個(gè)可以表示腳本當(dāng)前路徑的函數(shù),可以說是非常強(qiáng)大了,比如說:

大家可以看到,后面兩個(gè)結(jié)果相同,說明后面兩個(gè)效果一樣嗎,那可不一定。
不信,你可以看看我接下來的操作,讓你懷疑人生:
創(chuàng)建兩個(gè)py文件,你懂的,然后分別鍵入代碼:
#cg.pyimport sysdef ff():print(sys.path[0],':',sys.argv[0],':',__file__)#sys.argv[0] 一般得到的是相對路徑ff()#fd.pyimport cgcg.ff()

可以看到,最后的結(jié)果就是顯然不一樣了,那么這是什么原因產(chǎn)生的了,哦,
原來,在fd中導(dǎo)入cg執(zhí)行的sys.argv[0]還是指的是運(yùn)行的主文件fd.py,而file卻輸出的是cg.py.
順便跟大家科普以下查看模塊下有哪些方法的一個(gè)函數(shù):dir()

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

可以說是很強(qiáng)大了。
接下來我們再來說說另一個(gè)非常牛逼的東西---------os。
/OS/
一、文件操作(os直屬常用方法)
關(guān)閉文件描述符 hwos.close(hw)# 關(guān)閉所有文件描述符,從 hw1(包含) 到 hw2(不包含), 錯(cuò)誤會(huì)忽略os.closerange(hw1,hw2)# 通過文件描述符改變當(dāng)前工作目錄os.fchdir(hw)# 改變一個(gè)文件的訪問權(quán)限,該文件由參數(shù)hw指定,參數(shù)mode是Unix下的文件訪問權(quán)限。os.fchmod(hw, mode)# 修改一個(gè)文件的所有權(quán),這個(gè)函數(shù)修改一個(gè)文件的用戶ID和用戶組ID,該文件由文件描述符hw指定。os.fchown(hw, id1, id2)# 強(qiáng)制將文件寫入磁盤,該文件由文件描述符hw指定,但是不強(qiáng)制更新文件的狀態(tài)信息。os.fdatasync(hw)#通過文件描述符hw 創(chuàng)建一個(gè)文件對象,并返回這個(gè)文件對象os.fdopen(hw[, mode[, bufsize]])#返回一個(gè)打開的文件的系統(tǒng)配置信息。name為檢索的系統(tǒng)配置的值,它也許是一個(gè)定義系統(tǒng)值的字符串,這些名字在很多標(biāo)準(zhǔn)中指定(POSIX.1, Unix 95, Unix 98, 和其它)。os.fpathconf(hw, name)#返回文件描述符hw的狀態(tài),像stat()。os.fstat(hw)#返回包含文件描述符hw的文件的文件系統(tǒng)的信息,像 statvfs()os.fstatvfs(hw)#強(qiáng)制將文件描述符為hw的文件寫入硬盤。os.fsync(hw)#裁剪文件描述符hw對應(yīng)的文件, 所以它最大不能超過文件大小。os.ftruncate(hw,length)#復(fù)制文件描述符hwos.dup(hw)# 將一個(gè)文件描述符hw復(fù)制到另一個(gè)hw1os.dup2(hw,hw1)# 返回與終端hw(一個(gè)由os.open()返回的打開的文件描述符)關(guān)聯(lián)的進(jìn)程組os.tcgetpgrp(hw)# 設(shè)置與終端hw(一個(gè)由os.open()返回的打開的文件描述符)關(guān)聯(lián)的進(jìn)程組為hw1。os.tcsetpgrp(hw, hw1)# 返回唯一的路徑名用于創(chuàng)建臨時(shí)文件。os.tempnam([dir[, prefix]])# 返回一個(gè)打開的模式為(w+b)的文件對象 .這文件對象沒有文件夾入口,沒有文件描述符,將會(huì)自動(dòng)刪除。os.tmpfile()# 為創(chuàng)建一個(gè)臨時(shí)文件返回一個(gè)唯一的路徑os.tmpnam()# 返回一個(gè)字符串,它表示與文件描述符hw 關(guān)聯(lián)的終端設(shè)備。如果hw 沒有與終端設(shè)備關(guān)聯(lián),則引發(fā)一個(gè)異常。os.ttyname(hw)# 刪除文件路徑os.unlink(path)# 返回指定的path文件的訪問和修改的時(shí)間。os.utime(path, times)# 輸出在文件夾中的文件名通過在樹中游走,向上或者向下。os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])# 寫入字符串到文件描述符hw中. 返回實(shí)際寫入的字符串長度os.write(hw, str)# 獲取指定路徑的文件系統(tǒng)統(tǒng)計(jì)信息os.statvfs(path)# 返回當(dāng)前工作目錄os.getcwd()# 返回一個(gè)當(dāng)前工作目錄的Unicode對象os.getcwdu()# 如果文件描述符hw是打開的,同時(shí)與tty(-like)設(shè)備相連,則返回true, 否則False。os.isatty(hw)# 設(shè)置路徑的標(biāo)記為數(shù)字標(biāo)記,類似 chflags(),但是沒有軟鏈接os.lchflags(path, flags)# 修改連接文件權(quán)限os.lchmod(path, mode)# 更改文件所有者,類似 chown,但是不追蹤鏈接。os.lchown(path, uid, gid)# 返回path指定的文件夾包含的文件或文件夾的名字的列表。os.listdir(path)# 設(shè)置文件描述符 fd當(dāng)前位置為pos, how方式修改: SEEK_SET 或者 0設(shè)置從文件開始的計(jì)算的pos; SEEK_CUR或者 1 則從當(dāng)前位置計(jì)算;os.SEEK_END或者2則從文件尾部開始. 在unix,Windows中有效os.lseek(fd, pos, how)# 打開一個(gè)文件,并且設(shè)置需要的打開選項(xiàng),mode參數(shù)是可選的os.open(file, flags[, mode])# 打開一個(gè)新的偽終端對。返回 pty 和 tty的文件描述符。os.openpty()# 返回相關(guān)文件的系統(tǒng)配置信息。os.pathconf(path, name)# 用于分割文件路徑的字符串os.pathsep# 獲取當(dāng)前目錄的父目錄字符串名:('..')os.pardir# 創(chuàng)建一個(gè)管道. 返回一對文件描述符(r, w) 分別為讀和寫os.pipe()# 從一個(gè) command 打開一個(gè)管道os.popen(command[, mode[, bufsize]])# 字符串指示當(dāng)前使用平臺(tái)。win->'nt'; Linux->'posix'os.name# 從文件描述符hw中讀取最多n個(gè)字節(jié),返回包含讀取字節(jié)的字符串,文件描述符hw對應(yīng)文件已達(dá)到結(jié)尾, 返回一個(gè)空字符串。os.read(hw, n)#返回路徑所在的根目錄,主目錄主文件os.walk(path)#返回路徑下的目錄和文件os.listdir(path)#切換當(dāng)前程序操作的路徑os.chdir(path)#重命名文件os.rename(oldfile,newfile)
二、路徑操作
#將文件路徑和文件名分割(會(huì)將最后一個(gè)目錄作為文件名而分離)os.path.split(filename)#將文件路徑和文件擴(kuò)展名分割成一個(gè)元組os.path.splitext(filename)#返回文件路徑的目錄部分os.path.dirname(filename)#返回文件路徑的文件名部分os.path.basename(filename)#將文件路徑和文件名湊成完整文件路徑os.path.join(dirname,basename)#獲得絕對路徑os.path.abspath(name)#把路徑分割為掛載點(diǎn)和文件名os.path.splitunc(path)#規(guī)范path字符串形式os.path.normpath(path)#判斷文件或目錄是否存在os.path.exists()#如果path是絕對路徑,返回Trueos.path.isabs()#返回path的真實(shí)路徑os.path.realpath(path)#從start開始計(jì)算相對路徑os.path.relpath(path[, start])#轉(zhuǎn)換path的大小寫和斜杠os.path.normcase(path)#判斷name是不是一個(gè)目錄,name不是目錄就返回falseos.path.isdir()#判斷name是不是一個(gè)文件,不存在返回falseos.path.isfile()#判斷文件是否連接文件,返回booleanos.path.islink()#指定路徑是否存在且為一個(gè)掛載點(diǎn),返回booleanos.path.ismount()#是否相同路徑的文件,返回booleanos.path.samefile()#返回最近訪問時(shí)間 浮點(diǎn)型os.path.getatime()#返回上一次修改時(shí)間 浮點(diǎn)型os.path.getmtime()#返回文件創(chuàng)建時(shí)間 浮點(diǎn)型os.path.getctime()#返回文件大小 字節(jié)單位os.path.getsize()#返回list(多個(gè)路徑)中,所有path共有的最長的路徑os.path.commonprefix(list)#路徑存在則返回True,路徑損壞也返回Trueos.path.lexists#把path中包含的”~”和”~user”轉(zhuǎn)換成用戶目錄os.path.expanduser(path)#根據(jù)環(huán)境變量的值替換path中包含的”$name”和”${name}”os.path.expandvars(path)#判斷fp1和fp2是否指向同一文件os.path.sameopenfile(fp1, fp2)#判斷stat tuple stat1和stat2是否指向同一個(gè)文件os.path.samestat(stat1, stat2)#一般用在windows下,返回驅(qū)動(dòng)器名和路徑組成的元組os.path.splitdrive(path)#遍歷path,給每個(gè)path執(zhí)行一個(gè)函數(shù)os.path.walk(path, visit, arg)#設(shè)置是否支持unicode路徑名os.path.supports_unicode_filenames()
三、進(jìn)程管理
# 創(chuàng)建一個(gè)軟鏈接os.symlink(src, dst)# 創(chuàng)建硬鏈接,名為參數(shù) dst,指向參數(shù) srcos.link(src, dst)# 像stat(),但是沒有軟鏈接os.lstat(path)# 運(yùn)行shell命令,直接顯示os.system("bash command")# 改變當(dāng)前進(jìn)程的根目錄os.chroot(path)#shell命令,不返回結(jié)果,但是可以進(jìn)行讀取os.popen(command).read()# 當(dāng)前平臺(tái)使用的行終止符,win下為"\t\n",Linux下為"\n"os.linesep#路徑連接符os.sep#從原始的設(shè)備號(hào)中提取設(shè)備major號(hào)碼 (使用stat中的st_dev或者st_rdev field)。os.major(device)# 以major和minor設(shè)備號(hào)組成一個(gè)原始設(shè)備號(hào)os.makedev(major, minor)# 遞歸文件夾創(chuàng)建函數(shù)。像mkdir(),但創(chuàng)建的所有intermediate-level文件夾需要包含子文件夾。os.makedirs(path[, mode])# 從原始的設(shè)備號(hào)中提取設(shè)備minor號(hào)碼(使用stat中的st_dev或者st_rdev field )。os.minor(device)# 以數(shù)字mode的mode創(chuàng)建一個(gè)名為path的文件夾.默認(rèn)的 mode 是 0777 (八進(jìn)制)。os.mkdir(path[, mode])# 創(chuàng)建命名管道,mode 為數(shù)字,默認(rèn)為 0666 (八進(jìn)制)os.mkfifo(path[, mode])# 創(chuàng)建一個(gè)名為filename文件系統(tǒng)節(jié)點(diǎn)(文件,設(shè)備特別文件或者命名pipe)。os.mknod(filename[, mode=0600, device])
四、環(huán)境參數(shù)
os.access(path, mode)os.chflags(path, flags)os.chmod(path, mode)os.chown(path, uid, gid)os.getlogin()os.cpu_count()os.urandom(n)os.environos.getenv('CYGWIN')os.environ.get('CYGWIN')os.environ.setdefault(key,value)os.getenvb('CYGWIN')
五、stat子庫
#獲取到的文件屬性列表fileStats = os.stat(path)#獲取文件的模式fileStats[stat.ST_MODE]#文件大小fileStats[stat.ST_SIZE]#文件最后修改時(shí)間fileStats[stat.ST_MTIME]#文件最后訪問時(shí)間fileStats[stat.ST_ATIME]#文件創(chuàng)建時(shí)間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])#是否塊設(shè)備stat.S_ISBLK(fileStats[stat.ST_MODE])#是否字符設(shè)置stat.S_ISCHR(fileStats[stat.ST_MODE])
6、一鍵死機(jī)
為什么要說這個(gè)呢?完全是為了好玩,哈哈哈。
我們都知道os 能很輕松打開一個(gè)程序,只要你知道這個(gè)源程序根目錄的位置。
所以我們一般都會(huì):
os.system('notepad') #打開記事本os.system('start notepad')#打開記事本
這樣可以很輕松打開一個(gè)記事本,那么我們要想讓它無限打開。我給它整個(gè)死循環(huán),給它個(gè)無限遞歸不就完了。是不是很簡單了?
還有一種比較優(yōu)雅的打開程序的方法,那就是popen方法:
pp=os.popen('notebook')不僅如此,我們還能看到它執(zhí)行結(jié)果后的返回值。
print(pp.read())
哈哈,也是很666了。
/小結(jié)/
1、本文基于Python編程語言,主要介紹了Python操作文件目錄的兩個(gè)大庫sys和os,在實(shí)際應(yīng)用中十分的常用,希望大家了解。本文內(nèi)容十分豐富,歡迎大家積極學(xué)習(xí)。
2、結(jié)合部分實(shí)際案例,圖文并茂,幫助大家更好的理解文件操作。
PS:公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下,如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!


【神秘禮包獲取方式】
