打开文件后是否可以更改文件访问模式?
f=open(my_file, 'r')
修改 f 以便能够写入它,或者声明该文件应在通用换行符模式下打开?
由于Linux和Windows不支持更改文件描述符的权限(至少在Linux中没有更改打开模式的posix函数),因此一旦设置了文件描述符,就无法更改其权限(尽管某些特定于操作系统的技巧存在,但我不建议使用)。
您需要使用其他权限重新打开它。
尽管似乎没有办法更改底层描述符的访问模式,但如果您要限制访问(如果要将只读文件更改为可写,则无法实现),则可以在 Python 对象级别上进行一些工作。可以尝试以下代码:
f=open(my_file, 'w+')
f.write = None
f.writelines = None
# etc...
file.write
是只读属性。此外,这只是创建了一个实例变量来隐藏类属性; type(f).write(f, ...)
仍然可用。 - chepnerf = open(my_file, 'r+')
f = open(my_file, 'w')
假设您有一个仅用于读取的文件对象f_r
,您可以使用os.fdopen()
来获取与同一文件关联但具有不同模式的文件对象f_w
:
f_r = open(filename, "r")
f_w = os.fdopen(f_read.fileno(), "a+")
f_w.write("Here I come\n")
然而,如果滥用,这种方法可能会导致痛苦和苦难。由于文件对象进行一些缓冲(如果未禁用),同时使用f_r
和f_w
可能会导致意外结果。此外,重新打开<stdin>
或<stdout>
可能会或可能不会做您需要或期望的事情。
这是我解决这个问题的方法。在此背景下,我的情况是,文件仅存储在内存中,而不在磁盘上,因此我无法从那里重新打开它。
from io import StringIO
...
bytes = file.read()
string = bytes.decode("utf-8") # or whatever encoding you wanna use
file = StringIO(string)
如果您不想重新打开它,请使用:
f.mode = "mode-to-change-to"#w, a, r, ect.
对于模式,
f.name = "file_name"
对于名称和:
f.encoding = "encoding"#default is UTF-8
用于编码。
编辑
你应该使用:
with open("filename", "mode") as f:
#do something
f.mode = "another-mode"
#do something else
让文件在完成后自动关闭
f = open(my_file, 'w')
举个例子。 - Malik Brahimi