【发布时间】:2015-02-13 04:47:30
【问题描述】:
我正在编写一个数据处理代码,我在其中创建一个新文件,将处理后的数据写入该文件并关闭。但该文件必须以只读模式关闭,以免被意外修改。这可以在 Python 中完成吗?
【问题讨论】:
我正在编写一个数据处理代码,我在其中创建一个新文件,将处理后的数据写入该文件并关闭。但该文件必须以只读模式关闭,以免被意外修改。这可以在 Python 中完成吗?
【问题讨论】:
为此,您使用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_IROTH 和S_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)
【讨论】:
使用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 上,这对于任何事情来说可能都不够用,只能玩弄只读标志。请参阅其他 SO 帖子 [1]。
【讨论】:
对于 Windows 操作系统,可以尝试这样的操作:
import os
filename = open("file_name.txt", "w")
filename.write("my text")
filename.close()
os.system("attrib +r file_name.txt")
【讨论】:
我猜你可以在写入文件后使用 os 模块来更改文件权限,如下所示:
import os
filename=open("file_name","w")
filename.write("my text")
filename.close()
os.system("chmod 444 file_name")
【讨论】:
os.system 调用 chmod 是不可移植的,它不能在 Windows 上工作。最好直接使用os.chmod方法。