文件打开后是否可以更改文件访问模式?
f=open(my_file, 'r')
更改f以便能够写入,或声明文件应该以通用换行模式打开?
答案 0 :(得分:4)
由于Linux和Windows都不支持更改文件描述符的权限。 (至少没有改变开放模式的posix函数),一旦设置了文件描述符,就不可能改变它的权限(某些特定于OS的tricks存在,但我不推荐它。) / p>
您需要使用其他权限重新打开它。
答案 1 :(得分:1)
虽然似乎没有任何方法可以更改底层描述符的访问模式,但是如果你想限制访问,你可以在python对象级别做一些工作(如果你想要只读一个文件可写你运气不好)。像这样:
f=open(my_file, 'w+')
f.write = None
f.writelines = None
# etc...
如果您正在使用python2,则需要包装文件对象以便能够禁用写入方法。
虽然您可以将这样的已修改文件对象恢复为可写(因此您可以绕过该块 - 顺便说一句,在python中几乎总是如此),可以使其模拟读取的行为只有文件(对于很多情况来说这都足够了)。
答案 2 :(得分:0)
您可以按如下方式打开文件以便能够读写
f = open(my_file, 'r+')
答案 3 :(得分:0)
假设您已关闭文件,只需重新分配给新文件对象:
f = open(my_file, 'w')
答案 4 :(得分:0)
鉴于您有一个仅为阅读而打开的文件对象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>
可能会也可能不会达到您的需要或期望。
答案 5 :(得分:0)
这是我解决此问题的方法。就上下文而言,就我而言,该文件仅存储在内存中,而不存储在磁盘上,因此我无法仅从那里重新打开它。
from io import StringIO
...
bytes = file.read()
string = bytes.decode("utf-8") # or whatever encoding you wanna use
file = StringIO(string)
答案 6 :(得分:0)
如果您不想重新打开它,请使用:
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
使文件自动关闭