python os.stat() 和 stat模塊詳解


stat 系統調用時用來返回相關文件的系統狀態信息的。

首先我們看一下stat中有哪些屬性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>>>  import  os
>>>  print  os.stat( "/root/python/zip.py" )
( 33188 2033080 26626L 1 0 0 864 1297653596 1275528102 1292892895 )
>>>  print  os.stat( "/root/python/zip.py" ).st_mode    #權限模式
33188
>>>  print  os.stat( "/root/python/zip.py" ).st_ino    #inode number
2033080
>>>  print  os.stat( "/root/python/zip.py" ).st_dev     #device
26626
>>>  print  os.stat( "/root/python/zip.py" ).st_nlink   #number of hard links
1
>>>  print  os.stat( "/root/python/zip.py" ).st_uid     #所有用戶的user id
0
>>>  print  os.stat( "/root/python/zip.py" ).st_gid     #所有用戶的group id
0
>>>  print  os.stat( "/root/python/zip.py" ).st_size   #文件的大小,以位為單位
864
>>>  print  os.stat( "/root/python/zip.py" ).st_atime   #文件最后訪問時間
1297653596
>>>  print  os.stat( "/root/python/zip.py" ).st_mtime   #文件最后修改時間
1275528102
>>>  print  os.stat( "/root/python/zip.py" ).st_ctime   #文件創建時間
1292892895

 正如你上面看到的,你可以直接訪問到這些屬性值。

好了,下面我來看看python中的stat模塊,先看看自帶的例子:

復制代碼
import os, sys
from stat import *

def walktree(top, callback):
    '''recursively descend the directory tree rooted at top,
       calling the callback function for each regular file'''

    for f in os.listdir(top):
        pathname = os.path.join(top, f)
        mode = os.stat(pathname).st_mode
        if S_ISDIR(mode):
            # It's a directory, recurse into it
            walktree(pathname, callback)
        elif S_ISREG(mode):
            # It's a file, call the callback function
            callback(pathname)
        else:
            # Unknown file type, print a message
            print 'Skipping %s' % pathname

def visitfile(file):
    print 'visiting', file

if __name__ == '__main__':
    walktree(sys.argv[1], visitfile)
復制代碼

可以這么理解,os.stat是將文件的相關屬性讀出來,然后用stat模塊來處理,處理方式有多重,就要看看stat提供了什么了。

1.  可以對st_mode做相關的判斷,如是否是目錄,是否是文件,是否是管道等。

先看一下處理os.stat返回的st_mode結果的函數,就想上面的例子中的一樣,這些函數可以做出判斷:

復制代碼
if stat.S_ISREG(mode):           #判斷是否一般文件
   print 'Regular file.'
elif stat.S_ISLNK (mode):         #判斷是否鏈接文件
   print 'Shortcut.'
elif stat.S_ISSOCK (mode):        #判斷是否套接字文件    
   print 'Socket.'
elif stat.S_ISFIFO (mode):        #判斷是否命名管道
   print 'Named pipe.'
elif stat.S_ISBLK (mode):         #判斷是否塊設備
   print 'Block special device.'
elif stat.S_ISCHR (mode):         #判斷是否字符設置
  print 'Character special device.'
elif stat.S_ISDIR (mode):         #判斷是否目錄
  print 'directory.'
##額外的兩個函數
stat.S_IMODE (mode): #返回文件權限的chmod格式
  print 'chmod format.'
 
         
stat.S_IFMT (mode): #返回文件的類型
  print 'type of fiel.'
 
復制代碼

2.   還有一些是各種各樣的標示符,這些標示符也可以在os.chmod中使用,下面附上這些標示符的說明:

復制代碼
    stat.S_ISUID: Set user ID on execution.                      不常用

    stat.S_ISGID: Set group ID on execution.                    不常用

    stat.S_ENFMT: Record locking enforced.                                          不常用

    stat.S_ISVTX: Save text image after execution.                                在執行之后保存文字和圖片

    stat.S_IREAD: Read by owner.                                                           對於擁有者讀的權限

    stat.S_IWRITE: Write by owner.                                                         對於擁有者寫的權限

    stat.S_IEXEC: Execute by owner.                                                       對於擁有者執行的權限

    stat.S_IRWXU: Read, write, and execute by owner.                          對於擁有者讀寫執行的權限

    stat.S_IRUSR: Read by owner.                                                            對於擁有者讀的權限

    stat.S_IWUSR: Write by owner.                                                          對於擁有者寫的權限

    stat.S_IXUSR: Execute by owner.                                                       對於擁有者執行的權限

    stat.S_IRWXG: Read, write, and execute by group.                                 對於同組的人讀寫執行的權限

    stat.S_IRGRP: Read by group.                                                             對於同組讀的權限

    stat.S_IWGRP: Write by group.                                                           對於同組寫的權限

    stat.S_IXGRP: Execute by group.                                                        對於同組執行的權限

    stat.S_IRWXO: Read, write, and execute by others.                          對於其他組讀寫執行的權限

    stat.S_IROTH: Read by others.                                                           對於其他組讀的權限

    stat.S_IWOTH: Write by others.                                                         對於其他組寫的權限

    stat.S_IXOTH: Execute by others.                                                      對於其他組執行的權限
復制代碼

 

例子:我想獲得某個文件的屬性信息,並查看他的權限信息,用chmod的格式顯示出來。

復制代碼
>>> import stat
>>> import os
>>> st = os.stat('sig.txt')
>>> mode = st.st_mode
>>> stat.S_IFMT(mode)
32768
>>> stat.S_IMODE(mode)
438
>>> print oct(stat.S_IMODE(mode))#oct 是轉換為八進制
0666
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM