【问题标题】:Change file to read-only mode in Python在 Python 中将文件更改为只读模式
【发布时间】:2015-02-13 04:47:30
【问题描述】:

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

【问题讨论】:

    标签: python file-io


    【解决方案1】:

    为此,您使用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
    

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

    【讨论】:

    • 以及如何在运行程序时将其更改为写入。我想在程序运行的时候改写,退出的时候应该改成只读模式。
    • 啊,您没有在原始问题中指定。我会更新
    【解决方案2】:

    此解决方案保留文件的先前权限,类似于命令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)    
    

    【讨论】:

      【解决方案3】:

      使用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]

      【讨论】:

        【解决方案4】:

        对于 Windows 操作系统,可以尝试这样的操作:

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

        【讨论】:

        • 不推荐,因为它不是独立于操作系统的,而且如果 file_name 中有空格会失败。
        • 这似乎与 3 年前发布的 @dgsleeps 答案相同
        【解决方案5】:

        我猜你可以在写入文件后使用 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方法。
        猜你喜欢
        • 1970-01-01
        • 2020-03-07
        • 2011-09-21
        • 2017-01-29
        • 1970-01-01
        • 2016-10-28
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多