为什么python的函数“open”会在第二个参数为“w”时自动创建一个文件?

时间:2017-12-21 04:47:58

标签: python

当我使用此代码时,它会自动创建一个文件。为什么?在哪里可以看到此函数的源代码?

2017-28

2 个答案:

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