1

我想在 python 中创建一个空文件。

目前我正在使用open('FILENAME', 'a').close(),但我看到很多人使用os.mknod().

我做了一些研究,似乎os.mknod()使用了您正在使用的操作系统中的工具(因此它的库名称),这open()是创建空文件的“pythonic”方式。

这两种方法在速度和实现方面有什么区别?

您会推荐任何其他更可靠或更快速的方法来创建空文件吗?

4

1 回答 1

4

你可能想用这样的方法创建常规文件mknod

os.mknod(path, mode=0o600 | stat.S_IFREG)  # it seems that mode argument can be omitted for regular files

好吧,不要因为它不可移植(仅限 Unix)。尽可能坚持open(即使mknod在unix上创建文件时可能会在后台调用,性能差异很小)

您可以查看另一个问答(使用 mknod() 创建目录),其中的答案暗示os.mknod.

另一个可能的区别(没有检查这一点)是,如果文件已经存在,mknod可能会返回错误/异常,而open如果权限允许则愉快地打开文件。

不要忘记os包中的方法依赖于操作系统。使用它们有时会将您与您正在运行的系统联系起来(即使可以安全地假设os.remove并且os.rename可用,当然也存在实现差异)。

另请注意,open('FILENAME', 'a').close()不一定创建一个空文件。如果文件存在且权限正确,则它什么也不做(a用于append)。

  • 要使用截断打开并保持 100% 便携,请使用open('FILENAME', 'w').close()
  • 稍微快一点的方法是在不缓冲的情况下以二进制打开:open('FILENAME', mode='wb', buffering=0).close()
  • 为了提高速度并降低不可移植性的风险:os.open也是一种选择,因为它是较低级别的,并且在所有提供以下内容的 python 环境中都受支持openos.close(os.open('FILENAME',os.O_CREAT|os.O_BINARY))
于 2018-08-13T20:43:54.947 回答