[Tutor] [HELP]how to test properties of a file

Nick Lunt nick at javacat.f2s.com
Mon Apr 4 23:54:40 CEST 2005


I've gotten into the habit of just using the os.?_OK stuff.

eg

 >>> import os
 >>> os.access('/', os.W_OK)
False
 >>> os.access('/tmp', os.W_OK)
True

Thats gotta be simple if I understand it lol :)

Nick .


Alan Gauld wrote:

>>The simplest, IMHO, is :
>>
>>try:
>>   f = file(filename, "w")
>>   [...]
>>except IOError:
>>   print "The file is not writable"
>>
>>Of course, not that this method empty the file if it is writable !
>>    
>>
>The
>  
>
>>best is to just put your IO code in such a try block ... That way,
>>you're sure the file has the right mode.
>>    
>>
>
>Its not really the simplest, its not efficient and it might be
>dangerous
>if the file is not empty. At the very least open using 'a' to avoid
>obliterating the file!!
>
>However the os.stat function and stat module do what you want safely
>and more comprehensively:
>
>-----------------------------------
>Help on module stat:
>
>NAME
>    stat - Constants/functions for interpreting results of
>    os.stat() and os.lstat().
>
>FILE
>    /usr/lib/python2.3/stat.py
>
>DESCRIPTION
>    Suggested usage: from stat import *
>
>DATA
>    ST_ATIME = 7
>    ST_CTIME = 9
>    ST_DEV = 2
>    ST_GID = 5
>    ST_INO = 1
>    ST_MODE = 0
>    ST_MTIME = 8
>    ST_NLINK = 3
>    ST_SIZE = 6
>    ST_UID = 4
>    S_ENFMT = 1024
>
>-----------------------------------------
>
>The constants above are the indices into the tuple returned by
>os.stat()
>That will tell you most of the things you need to know,
>check the docs to find out what they all mean.
>For your purposes the important one is ST_MODE.
>
>So
>
>import os
>from stat import *
>status = os.stat('somefile.txt')[ST_MODE]
>if status & S_IWRITE: print 'writable'
>elif staus &  S_IREAD: print 'readable'
>else: print 'status is ', status
>
>Notice you have to use bitwise AND (&) to extract the status bits.
>
>HTH
>
>Alan G.
>
>_______________________________________________
>Tutor maillist  -  Tutor at python.org
>http://mail.python.org/mailman/listinfo/tutor
>
>  
>



More information about the Tutor mailing list