在 Python 中将文件更改为只读模式

Change file to read-only mode in Python

我正在编写一个数据处理代码,我在其中创建一个新文件,将处理后的数据写入该文件并关闭。但文件必须以只读模式关闭,以免被意外修改。这可以在 Python 中完成吗?

我想您可以在写入文件后使用 os 模块来更改文件权限,如下所示:

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

为此你使用 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)

请注意,这假定您具有适当的权限,并且您希望不仅仅是所有者能够读取该文件。如果不是这种情况,请酌情删除 S_IROTHS_IRGRP

更新

如果您需要使文件再次可写,只需调用 os.chmod 即可:

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

只需在打开文件进行写入之前调用它,然后在完成后调用第一个表单再次将其设为只读。

这个解决方案保留了文件以前的权限,就像命令一样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)    

对于 Windows OS 也许可以尝试这样的事情:

import os

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

使用 pathlib.Path,对于现代 python3,使用 path.chmod(mode: int)

八进制模式可以指定为 0o444(只读)。 See this for more chmod mode options.

注意,如果要应用于符号链接本身,请参见path.lchmod。 对于 path.chmod,在 3.10 之后,现在还有一个 follow_symlinks = True 参数。

在 windows 上,除了摆动 read-only 标志外,这可能不足以解决任何问题。查看其他 SO 帖子 [1].