306

我想x使用 python 创建一个带有路径的文件。我一直在使用os.system(y)where y = 'touch %s' % (x)。我一直在寻找 的非目录版本os.mkdir,但我找不到任何东西。是否有这样的工具可以在不打开文件或使用系统或 popen/子进程的情况下创建文件?

4

2 回答 2

539

没有打开文件就无法创建文件os.mknod("newfile.txt")但它需要 OSX 上的 root 权限)。创建文件的系统调用实际上是open()带有O_CREAT标志的。因此,无论如何,您将始终打开文件。

因此,简单地创建一个文件而不截断它以防万一它存在的最简单方法是:

open(x, 'a').close()

实际上你可以省略,.close()因为 CPython 的 refcounting GC 会在语句完成后立即关闭它open()- 但是明确地这样做会更干净,并且依赖于 CPython 特定的行为也不好。

如果您想要touch' 的行为(即在文件存在的情况下更新 mtime):

import os
def touch(path):
    with open(path, 'a'):
        os.utime(path, None)

您可以扩展它以在路径中创建任何不存在的目录:

basedir = os.path.dirname(path)
if not os.path.exists(basedir):
    os.makedirs(basedir)
于 2012-09-29T17:25:22.423 回答
59

当然,有一种无需打开即可创建文件的方法。就像打电话一样简单os.mknod("newfile.txt")。唯一的缺点是这个调用需要 OSX 上的 root 权限。

于 2015-08-02T15:00:33.793 回答