更改打开文件访问模式

时间:2015-04-12 22:12:31

标签: python file-io

文件打开后是否可以更改文件访问模式?

f=open(my_file, 'r')

更改f以便能够写入,或声明文件应该以通用换行模式打开?

7 个答案:

答案 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_rf_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

使文件自动关闭