当前我正在使用open('FILENAME', 'a').close()
,但我看到很多人都在使用os.mknod()
。
我做了一些研究,看来os.mknod()
使用的是您所使用的操作系统中的工具(因此它的库名),而open()
是创建空文件的“ pythonic”方式。 / p>
这两种方法在速度和实现上有什么区别?
您是否建议使用其他更可靠或更快速的方法来创建一个空文件?
答案 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.remove
和os.rename
可用,当然还有实现上的差异)。
还请注意,open('FILENAME', 'a').close()
不一定会创建一个空文件。如果文件存在且权限正确,则它什么都不做(a
用于追加)。
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))