How do you use Python to get or change read-only/writeable access on files in Windows? The Python docs don't answer this in a direct manner. Here's one option using only the standard library.
import os, stat
myFile = r'C:\stuff\grail.txt'
fileAtt = os.stat(myFile)[0]
if (not fileAtt & stat.S_IWRITE):
# File is read-only, so make it writeable
os.chmod(myFile, stat.S_IWRITE)
else:
# File is writeable, so make it read-only
os.chmod(myFile, stat.S_IREAD)
You may prefer the
pywin32 extensions for this sort of thing...
import win32api, win32con
myFile = r'C:\stuff\grail.txt'
fileAtt = win32api.GetFileAttributes(myFile)
if (fileAtt & win32con.FILE_ATTRIBUTE_READONLY):
# File is read-only, so make it writeable
win32api.SetFileAttributes(myFile, ~win32con.FILE_ATTRIBUTE_READONLY)
else:
# File is writeable, so make it read-only
win32api.SetFileAttributes(myFile, win32con.FILE_ATTRIBUTE_READONLY)
Or, more concisely with win32:
roAtt = win32api.GetFileAttributes(myFile) & win32con.FILE_ATTRIBUTE_READONLY
win32api.SetFileAttributes(myFile, ~roAtt)
Using win32 you can also set other Windows file attributes (unlike
os.chmod), but read/write is usually all I care about.
You can use the dos attrib command:
ReplyDelete>>>os.system('attrib -R %s' % myFile)
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThird time's a charm... heh.
ReplyDeleteI wanted a single line read-only check and I ended up with this:
import os
if os.access('C:/temp/test.txt',W_OK) :
print 'File is NOT read only'
else :
print 'File is read only!'
This seems to make more sense to me for whatever reason.
sigh... I'm not deleting any more posts. That should read:
ReplyDeleteif os.access('C:/temp/test.txt',os.W_OK) :
Python docs are frustrating in this regard, your example here has _really_ helped me! Thank you :)
ReplyDeleteGood share
ReplyDelete