Skip to content Skip to sidebar Skip to footer

Change File To Read-only Mode In Python

I am writing a data processing code, in which I create a new file, write processed data in to this file and close. But the file has to be closed in read-only mode, so that it would

Solution 1:

For this you use os.chmod

import os
from stat import S_IREAD, S_IRGRP, S_IROTH

filename = "path/to/file"
os.chmod(filename, S_IREAD|S_IRGRP|S_IROTH)

Note that this assumes you have appropriate permissions, and that you want more than just the owner to be able to read the file. Remove S_IROTH and S_IRGRP as appropriate if that's not the case.

UPDATE

If you need to make the file writable again, simply call os.chmod as so:

from stat import S_IWUSR # Need to add this import to the ones above

os.chmod(filename, S_IWUSR|S_IREAD) # This makes the file read/write for the owner

Simply call this before you open the file for writing, then call the first form to make it read-only again after you're done.


Solution 2:

This solution preserves previous permission of the file, acting like command chmod -w FILE

import os
import stat

filename = "path/to/file"
mode = os.stat(filename).st_mode
ro_mask = 0o777 ^ (stat.S_IWRITE | stat.S_IWGRP | stat.S_IWOTH)
os.chmod(filename, mode & ro_mask)    

Solution 3:

Using pathlib.Path, for modern python3, use path.chmod(mode: int)

The octal mode could be specified like 0o444 (read only). See this for more chmod mode options.

Note, if it is to apply to the symlink itself, see path.lchmod. For path.chmod, after 3.10, there's now a follow_symlinks = True parameter as well.

On windows, this may not be sufficient for anything but twiddling the read-only flag. See other SO posts [1].


Solution 4:

For Windows OS maybe to try something like this:

import os

filename = open("file_name.txt", "w")
filename.write("my text")
filename.close()
os.system("attrib +r file_name.txt")

Solution 5:

I guess you could use os module after writing on your file to change the file permissions like this:

import os
filename=open("file_name","w")
filename.write("my text")
filename.close()
os.system("chmod 444 file_name")

Post a Comment for "Change File To Read-only Mode In Python"