在 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_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)
对于 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].
我正在编写一个数据处理代码,我在其中创建一个新文件,将处理后的数据写入该文件并关闭。但文件必须以只读模式关闭,以免被意外修改。这可以在 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_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)
对于 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].