python自帶庫OS 文件/目錄方法
os模塊提供了豐富的方法用來處理文件和目錄
1.os.access(path,mode)-----檢驗權限模式。使用當前的uid/gid嘗試訪問路徑
參數:path---要用來檢測是否有訪問權限的路徑
參數:mode---mode為F_OK,測試存在的路徑,還有其他的如下
os.F_OK:作為access()的mode參數,測試path是否存在
os.R_OK:包含在access()的mode參數中,測試path是否可讀
os.W_OK:包含在access()的mode參數中,測試path是否可寫
os.X_OK:包含在access()的mode參數中,測試path是否可執行
返回值:如果允許返回True,否則返回False。
實例:
#!/usr/bin/python
#coding='utf-8'
import os,sys
#假定/tmp/test.txt文件存在,並有讀寫權限無執行權限
r = os.access("/tmp/test.txt",os.F_OK)------返回True
r = os.access("/tmp/test.txt",os.R_OK)------返回True
r = os.access("/tmp/test.txt",os.W_OK)------返回True
r = os.access("/tmp/test.txt",os.X_OK)------返回False
2.os.chdir(path)-----改變當前工作目錄
參數:path---要切換到的心路徑
返回值:如果成功返回True,否則返回Fale
實例:
#!/usr/bin/python
#coding='utf-8'
#假設當前工作目錄為/www
import os,sys
path = "/tmp"
#查看當前工作目錄
curdir = os.getcwd()---返回/www目錄
#修改當前工作目錄
os.chdir(path)
#查看修改后的目錄
curdir = os.getcwd()---返回/tmp目錄
3.os.chflags(path,flags)-----設置路徑的標記為數字標記。多個標記可以使用OR組合起來
參數:path---文件名路徑或目錄路徑
參數:flags---可以是以下值:
stat.UF_NODUMP:非轉儲文件
stat.UF_IMMUTABLE:文件是只讀的
stat.UF_APPEND:文件只能追加內容
stat.UF_NOUNLINK:文件不可刪除
stat.UP_OPAQUE:目錄不透明,需要通過聯合堆棧查看
stat.SF_ARCHIVED:可存檔文件(超級用戶可設)
stat.SF_IMMUTABLE: 文件是只讀的(超級用戶可設)
stat.SF_APPEND: 文件只能追加內容(超級用戶可設)
stat.SF_NOUNLINK: 文件不可刪除(超級用戶可設)
stat.SF_SNAPSHOT: 快照文件(超級用戶可設)
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
# coding='utf-8'
import os,stat
path = "/tmp/test.txt"
#為文件設置標記,使得它不能被重命名和刪除
flags = stat.SF_NOUNLINK
r = os.chflags(path,flags)----返回None(方法沒有返回值)
4.os.chmod(path,mode)-----用於更改文件或目錄的權限
參數:path---文件名路徑或目錄路徑
參數:mode---可用以下選項按位或操作生成。目錄的讀權限表示可以獲取目錄里文件名列表,
執行權限表示可以把工作目錄切換到此目錄,刪除添加目錄里的文件必須同時
有寫和執行權限,文件權限以用戶id->組id->其它順序檢驗,最先匹配的允許或禁止權限被應用。
stat.S_IXOTH: 其他用戶有執行權0o001
stat.S_IWOTH: 其他用戶有寫權限0o002
stat.S_IROTH: 其他用戶有讀權限0o004
stat.S_IRWXO: 其他用戶有全部權限(權限掩碼)0o007
stat.S_IXGRP: 組用戶有執行權限0o010
stat.S_IWGRP: 組用戶有寫權限0o020
stat.S_IRGRP: 組用戶有讀權限0o040
stat.S_IRWXG: 組用戶有全部權限(權限掩碼)0o070
stat.S_IXUSR: 擁有者具有執行權限0o100
stat.S_IWUSR: 擁有者具有寫權限0o200
stat.S_IRUSR: 擁有者具有讀權限0o400
stat.S_IRWXU: 擁有者有全部權限(權限掩碼)0o700
stat.S_ISVTX: 目錄里文件目錄只有擁有者才可刪除更改0o1000
stat.S_ISGID: 執行此文件其進程有效組為文件所在組0o2000
stat.S_ISUID: 執行此文件其進程有效用戶為文件所有者0o4000
stat.S_IREAD: windows下設為只讀
stat.S_IWRITE: windows下取消只讀
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
# coding="utf-8"
import os, sys, stat
#假設/tmp/test.txt文件存在,設置文件可以通過組執行
path = "/tmp/test.txt"
os.chmod(path,stat.S_IXGRP)
設置文件可以被其他用戶寫入
os.chmod(path,stat.S_IWOTH)
5.os.chown(path,uid,gid)-----更改文件的所有者,如果不修改可以設置為-1,
需要超級用戶權限來執行權限修改操作,該方法只支持Unix。
參數:path---設置權限的文件路徑
參數:uid---所屬用戶ID
參數:gid---所屬用戶組ID
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
# coding=“uhf-8”
import os, sys
#假設/tmp/test.txt文件存在 設置所有者ID為100
path = "/tmp/test.txt"
os.chown(path,100,-1)----gid為-1不修改所屬組
6.os.chroot(path)-----改變當前進程的根目錄,需要管理員權限
參數:path---要設置為根目錄的目錄
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
#coding="utf-8"
import os,sys
#設置根目錄為/tmp
path = "/tmp"
os.chroot(path)
7.os.close(fd)-----關閉指定的文件描述符fd
參數:fd---文件描述符
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
#coding="utf-8"
import os,sys
#打開文件/tmp/test.txt
path = "/tmp/test.txt"
fd = os.open(path,os.O_RDWR|os.O_CREAT)
#寫入字符串
os.write(fd,"test file")
#關閉文件
os.close(fd)
8.os.closerange(fd_low,fd_high)-----關閉所有文件描述符,從fd_low(包含)到fd_high(不包含),忽略錯誤
參數:fd_low---最小文件描述符
參數:fd_high---最大文件描述符
返回值:該方法沒有返回值
實例同os.close(fd)
9.os.dup(fd)-----復制文件描述符
參數:fd---文件描述符
返回值:復制的文件描述符
實例:
#!/usr/bin/python
#coding="utf-8"
import os,sys
fd = os.open("/tmp/test.txt",os.O_RDWR|os.O_CREAT)
d_fd = os.dup(fd)
os.write(d_fd,"test")
os.closerange(fd,d_fd)
10.os.dup2(fd1,fd2)-----將一個文件描述符fd1復制到另一個文件描述符fd2
參數:fd1---被復制的文件描述符
參數:fd2---復制到的文件描述符
返回值:該方法沒有返回值(實操返回fd2的值)
實例:
#!/usr/bin/python
# coding="utf-8"
import sys.os
fd = os.open("/tmp/test.txt",os.O_RDWR|os.O_CREAT)
os.write(fd,"test file")
fd2=1000
os.dup2(fd,fd2)
os.lseek(fd2,0,0) #在新文件描述符插入數據
str = os.read(fd2,100) #str返回為“test file”
11.os.fchdir(fd)-----通過文件描述符改變當前工作目錄
參數:fd---文件描述符
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
# -coding="utf-8"
import os,sys
os.chdidr("/var/www/html") #先切換到指定目錄
fd = os.open("/tmp",os.O_RDONLY) #打開新目錄
os.fchdir(fd) #通過文件描述符改變目錄
os.getcwd() #返回“/tmp”目錄
os.close(fd)
12.os.fchmod(fd,mode)-----通過文件描述符更改文件或目錄的權限,
使用方法同os.chmod(path,mode)只是參數從路徑path變為文件描述符fd
13.os.fchown(fd,uid,gid)-----通過文件描述符更改文件的所有者,如果不修改可以設置為-1,
使用方法同os.fchown(path,uid,gid)只是參數從路徑path變為文件描述符fd
14.os.fdatasync(fd)-----用於強制將文件寫入磁盤,文件有文件描述符fd指定,
但不強制更新文件狀態。如果你需要刷新緩沖區可以使用該方法。
參數:fd---文件描述符
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
#coding="utf-8"
import os,sys
fd = os.open("/tmp/test.txt",os.O_RDWR|os.O_CREAT) #打開文件
os.write(fd,"test file") #寫入字符串
os.fdatasync(fd) #使用fdatasync()方法
os.lseek(fd,0,0)
str = os.read(fd,100) #str返回"test.txt"
15.os.fdopen(fd[,mode[,bufsize]])-----通過文件描述符fd創建一個文件對象並返回這個文件對象
參數:fd---文件描述符
參數:mode---可選,可以指定[r,w,a,r+,w+,a+,b]
參數:bufsize---可選,指定返回的文件對象是否帶緩沖:0表示不帶緩沖,1表示行緩沖
大於1的正數表示指定大小的緩沖單位byte,負數表示默認緩沖
返回值:通過文件描述符返回的文件對象
實例:
#!/usr/bin/python
#coding=“utf-8”
import os, sys
fd = os.open("/tmp/test.txt",os.O_RDWR|os.O_CREAT)#打開文件
fo = os.fdopen(fd,"w+",bufsize=-1)#獲取以上文件的對象
fo.write("test file") #寫入字符串
os.lseek(fd,0,0)
str = os.read(fd,100) #str返回“test file”
os.close(fd)
16.os.fsync(fd)-----強制將文件描述符為fd的文件寫入硬盤。如果你准備操作一個python文件
對象f,首先f.flush(),然后os.fsync(f.fileno()),確保與f相關的所有內存都寫入了硬盤
17.os.ftruncate(fd,length)-----剪裁文件描述符為fd對應的文件不超過length
參數:fd---文件描述符
參數:length---剪裁文件要到達的大小
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
#coding="utf-8"
fd = fopen("/tmp/test.txt",os.O_RDWR|os.O_CREAT)
os.write(fd,"This is a test file")
os.ftruncate(10)
os.lseek(fd,0,0)
str = os.read(fd,100) #str返回“This is a ”
os.close(fd)
18.os.getcwd()-----返回當前工作目錄
19.os.isatty(fd)-----如果文件描述符fd是打開的同時與tty(-like)設備連接返回True,否則返回False
20.os.link(src,dst)-----用於創建硬連接,名為參數dst,指向參數src,該方法對於創建一個已存在文件的拷貝是非常有用的。
21.os.listdir(path)-----用於返回指定文件夾包含的文件或文件夾的名字列表
參數:path---需要列出的目錄路徑
返回值:返回指定路徑下的文件和文件夾列表
22.os.lseek(fd,pos,how)------設置文件描述符fd當前位置為破碎,how方式修改
參數:fd---文件描述符
參數:pos---這是相對於給定的參數how在文件中的位置
參數:how---文件內參考位置。SEEK_SET或者0設置從文件開始計算的;SEEK_CUR或1則從當前位置計算
os.SEEK_END或2則從文件尾部開始
返回值:該方法沒有返回值
23.os.mkdir(path,mode)-----以數字權限模式創建目錄。默認的模式為o777(八進制)
參數:path---要創建的目錄,可以是相對或者絕對路徑
參數:mode---要為目錄設置的權限數字模式
返回值:該方法沒有返回值
實例:
#!/usr/bin/python
#coding="utf-8"
import os,sys
path = "/tmp/test/lesson"
os.makedir(path,0o755)
24.os.makedirs(path,mode)-----創建遞歸目錄,其他同os.mkdir(path,mode)
25.os.open(file,flags[,mode])-----打開一個文件,並設置打開選項,模式參數mode可選
參數:file---要打開的文件
參數:flags---可以是以下選項,多個使用“|”隔開:
os.O_RDONLY: 以只讀的方式打開
os.O_WRONLY: 以只寫的方式打開
os.O_RDWR : 以讀寫的方式打開
os.O_NONBLOCK: 打開時不阻塞
os.O_APPEND: 以追加的方式打開
os.O_CREAT: 創建並打開一個新文件
os.O_TRUNC: 打開一個文件並截斷它的長度為零(必須有寫權限)
os.O_EXCL: 如果指定的文件存在,返回錯誤
os.O_SHLOCK: 自動獲取共享鎖
os.O_EXLOCK: 自動獲取獨立鎖
os.O_DIRECT: 消除或減少緩存效果
os.O_FSYNC : 同步寫入
os.O_NOFOLLOW: 不追蹤軟鏈接
參數:mode---類似chmod()
返回值:返回新打開文件的描述符
26.os.pipe()-----創建一個管道,返回一對文件描述符對(r,w)分別為讀和寫
27.os.read(fd,n)-----從文件描述符中讀取最多那個字節
參數:fd---文件描述符
參數:n---讀取的字節數
返回值:返回包含讀取字節的字符串
28.os.remove(path)-----刪除路徑為path的文件
29.os.removedirs(path)-----遞歸刪除目錄
30.os.rename(src,dst)-----重命名文件或目錄
31.os.renames(old,new)-----遞歸對目錄進行更名,也可以對文件進行更名
32.os.rmdir(path)-----刪除非空目錄
33.os.stat(path)-----在給定的路徑上執行一個系統stat調用
參數:path---指定的路徑
返回值:
stat結構:
tat 結構:
st_mode: inode 保護模式
st_ino: inode 節點號。
st_dev: inode 駐留的設備。
st_nlink: inode 的鏈接數。
st_uid: 所有者的用戶ID。
st_gid: 所有者的組ID。
st_size: 普通文件以字節為單位的大小;包含等待某些特殊文件的數據。
st_atime: 上次訪問的時間。
st_mtime: 最后一次修改的時間。
st_ctime: 由操作系統報告的"ctime"。在某些系統上(如Unix)是最新的元數據更改的時間,在其它系統上(如Windows)是創建時間(詳細信息參見平台的文檔)。
34.os.unlink(path)-----刪除文件,如果是目錄返回錯誤
35.os.walk(top[,topdown=True[,onerror=None[,followlinks=False]]])
-----通過在目錄樹中游走輸出在目錄中的文件名,向上或向下。該方法是一個簡單易用的文件,目錄遍歷器。
參數:top---你所要遍歷的目錄地址,返回的是一個三元組(root,dirs,files)
root 所指的是當前正在遍歷的這個文件夾的本身的地址
dirs 是一個 list ,內容是該文件夾中所有的目錄的名字(不包括子目錄)
files 同樣是 list , 內容是該文件夾中所有的文件(不包括子目錄)
參數:topdown---為True,則先遍歷top目錄然后遍歷top文件夾中的每個子目錄,否則先遍歷top的子目錄,
參數:onerror---需要一個callable對象,當walk需要異常時會調用
參數:followlinks---True則會優先遍歷目錄下快捷方式,否則先遍歷top的子目錄
實例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
for root,dirs,files in os.walk(".",topdown=False):
for name in files:
print name
for name in dirs:
print name
36.os.write(fd,str)-----寫入字符串到文件描述符fd中,返回實際寫入的字符串長度