当我使用此代码时,它会自动创建一个文件。为什么?在哪里可以看到此函数的源代码?
2017-28
答案 0 :(得分:1)
w
标志打开一个文件,截断它,然后从头开始写。我有兴趣调查它为什么在你调用它时立即创建文件,但是在规范中似乎并没有太多描述它的预期行为。
虽然找到源代码可能并不容易,但您可以看到文档here。请参阅modes
参数下的表格,了解您可以使用的所有模式的说明。
我们只能猜测撰写open()
的人的意图,但看起来所有模式中的一致性是:
打开文件并返回相应的文件对象。如果无法打开文件,则会引发OSError。
如果没有从编写规范的人那里得到输入,我会认为他们认为“打开文件”涉及创建它,如果它不存在。
答案 1 :(得分:0)
这实际上是一个非常好的问题,你让我思考。由于Python是开源的,因此应该能够看到更多文档,实际代码!我使用了this线程,最后得到了源代码。这种内置函数通常用C语言实现。所以,如果你知道C-I不要! - 你将能够通读它并完全理解。
以下是源代码:
https://github.com/python/cpython/blob/master/Modules/_io/fileio.c
(查看完整目录以了解它:
https://github.com/python/cpython/tree/master/Modules/_io)
搜索术语' w' (用单引号)并从那里开始。
它包含这样的代码,这是您正在寻找的:
case 'r':
if (rwa)
goto bad_mode;
rwa = 1;
self->readable = 1;
break;
case 'w':
if (rwa)
goto bad_mode;
rwa = 1;
self->writable = 1;
flags |= O_CREAT | O_TRUNC;
break;