python中的os.mknod()和open('FILENAME','a')之间有什么区别,速度和实现?

时间:2018-08-13 20:32:54

标签: python

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

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

我做了一些研究,看来os.mknod()使用的是您所使用的操作系统中的工具(因此它的库名),而open()是创建空文件的“ pythonic”方式。 / p>

  

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

     

您是否建议使用其他更可靠或更快速的方法来创建一个空文件?

1 个答案:

答案 0 :(得分:4)

您可能想使用mknod创建常规文件,如下所示:

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

好吧,不要这样做,因为它不是可移植的(Unix only)。尽可能坚持使用open(即使在创建文件时可能在UNIX的幕后调用mknod,性能差异也很小)

您可以查看另一个问答(Creating directory with mknod()),答案提示os.mknod的不可移植性。

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

请不要忘记os包中的方法取决于操作系统。有时,使用它们会使您与正在运行的系统联系在一起(即使可以安全地假设os.removeos.rename可用,当然还有实现上的差异)。

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

  • 要使用截断功能打开并保持100%可移植性,请使用open('FILENAME', 'w').close()
  • 一种稍快的方法是在不进行缓冲的情况下以二进制打开:open('FILENAME', mode='wb', buffering=0).close()
  • 为了提高速度并降低不可移植性的风险:os.open也是一个选项,因为它是较低级别的,并且在提供open的所有python环境中受支持:os.close(os.open('FILENAME',os.O_CREAT|os.O_BINARY))