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

2024-04-23 21:03:28 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用这个代码时,它会自动创建一个档案。为什么?在哪里可以看到这个函数的源代码?你知道吗

with open('E:/test.txt','w') as f:
    for i in range(10):
        f.write('abc\n')
f.close()

Tags: 函数代码intesttxtforclose源代码
2条回答

w标志打开一个文件,将其截断,然后从头开始写入。我很感兴趣的是调查它为什么一调用它就创建文件,但是规范中似乎没有太多描述它预期的行为。你知道吗

虽然要找到源代码可能并不容易,但您可以查看文档here。请参阅modes参数下的表格,以了解可以使用的所有模式的说明。你知道吗

我们只能猜测写open()的人的意图,但似乎所有模式中一致的一点是:

Open file and return a corresponding file object. If the file cannot be opened, an OSError is raised.

如果没有从编写规范的人那里得到输入,我会假设他们认为“打开文件”涉及到创建它,如果它不存在的话。你知道吗

这是一个非常好的问题,你让我思考。由于Python是开源的,所以应该能够看到比文档更多的实际代码!我使用了this线程,最终得到了源代码。这类内置函数通常是用C语言实现的,所以如果你懂C的话-我不懂!-你将能够通读并完全理解它。你知道吗

以下是源代码:

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;

相关问题 更多 >