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

标签 python python-3.x

考虑以下代码:

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

如果在我运行此代码时 myfile2.dat 不存在,空闲时会使用 rb+ 而不是 ab+ 打开一个新文件,为什么?

最佳答案

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

本质上是同一件事。这里没有问题,您仍然可以读取写入文件。

在幕后,文件仍然以附加模式打开,但是 .mode 属性提供了一个更简单的文件 View ;它只会报告您现在可以对文件执行的操作,而不是您打开文件时发生的情况。它仅显示您是否可以读取或写入文件以及文件是否以独占方式打开(x 模式)。

参见 C code for the .mode attribute .

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

关于python - 为什么我不能指定文件的打开方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15559257/

相关文章:

python - 如何扩展 python 模块?向 `python-twitter` 包添加新功能

python - 导入django不起作用? Python路径?

python - 滑冰计分系统

python - 使用 RegEx 查找并打印土耳其语中的复数单词

python - 抓取并提取多个元素

python - Peewee Model 关键字不能是更新上的表达式

python 我想用日期时间设置索引数据帧

python - 将条件表达式用于副作用是否有效?

python-3.x - AbstractEventLoop方法create_server在asyncio的事件模块中如何工作

python - Tkinter:如何构建适用于多种不同屏幕分辨率的应用程序