为什么我不能指定文件的打开方式?

时间:2013-03-21 22:15:43

标签: python python-3.x

请考虑以下代码:

try:
    f = open("myfile2.dat", "rb")
except IOError:
    f = open("myfile2.dat", "ab+")
print(f.mode)
f.close()

如果myfile2.dat在运行此代码时不存在,则Idle打开一个rb +而不是ab +的新文件,为什么?

2 个答案:

答案 0 :(得分:4)

您正在追加+写入模式中打开文件。因为没有文件可以将附加到,所以你会得到一个处于读写模式的文件。

基本上是同样的事情。这里没有问题,你仍然可以从中读取文件。

在幕后,文件仍以追加模式打开,但.mode属性提供了更简单的文件视图;它只会报告你可以用文件现在做什么,而不是你打开文件时发生的事情。它仅显示您是否可以读取或写入文件以及文件是否已打开以进行独占创建(x模式)。

请参阅C code for the .mode attribute

更新:是的,这很令人困惑,而且确实是一个错误。 path to fix this discrepancy最近已合并到Python中,当Python 2.7,3.3和3.4的新版本出来时,文件对象'.mode属性将更好地反映用于打开文件的原始模式字符串。

答案 1 :(得分:0)

编辑:忽略这一点,这是在Python 2.x上完成的,我在原始问题中没有看到#python-3.x标记。

它为我打开了ab +:

>>> try:
...     f = open("myfile2.dat", "rb")
... except IOError:
...     f = open("myfile2.dat", "ab+")
... 
>>> print(f.mode)
ab+

这是在Mac上运行Jython。