python中os.mknod()和open(';FILENAME';,';a';)之间的区别、速度和实现是什么? 我想用python创建一个空文件。
目前我使用的是python中os.mknod()和open(';FILENAME';,';a';)之间的区别、速度和实现是什么? 我想用python创建一个空文件。,python,Python,目前我使用的是open('FILENAME','a').close(),但我见过很多人使用os.mknod() 我做了一些研究,似乎os.mknod()使用了您正在使用的操作系统中的工具(因此它的库名),open()是创建空文件的“pythonic”方式 这两种方法在速度和实现方面有什么不同 您会推荐其他更可靠或更快的方法来创建空文件吗 您可能希望使用mknod创建常规文件,如下所示: os.mknod(path, mode=0o600 | stat.S_IFREG) # it seems t
open('FILENAME','a').close()
,但我见过很多人使用os.mknod()
我做了一些研究,似乎os.mknod()
使用了您正在使用的操作系统中的工具(因此它的库名),open()
是创建空文件的“pythonic”方式
这两种方法在速度和实现方面有什么不同
您会推荐其他更可靠或更快的方法来创建空文件吗
您可能希望使用
mknod
创建常规文件,如下所示:
os.mknod(path, mode=0o600 | stat.S_IFREG) # it seems that mode argument can be omitted for regular files
嗯,不要这样做,因为它不便于携带()。如果可以,请坚持open
(即使在unix上创建文件时可能会在后台调用mknod
,性能差异也非常小)
您可以查看另一个Q&A(),其中的答案暗示了os.mknod
的不可移植性
另一个可能的区别(没有检查这一点)是,如果文件已经存在,mknod
可能会返回错误/异常,而open
会在权限允许的情况下愉快地打开文件
不要忘记,os
包中的方法依赖于操作系统。使用它们有时会将您与正在运行的系统捆绑在一起(即使可以安全地假设os.remove
和os.rename
可用,当然还有实现上的差异)
还要注意,open('FILENAME','a').close()
不一定会创建一个空文件。如果文件存在并且权限正确,则它什么也不做(a
表示追加)
- 要使用截断打开并保持100%的可移植性,请使用
open('FILENAME','w')。close()
- 一种稍微快一点的方法是在没有缓冲的情况下以二进制打开:
open('FILENAME',mode='wb',buffering=0)。close()
- 为了提高速度并降低不可移植性的风险:
也是一个选项,因为它的级别较低,并且在所有提供os.open
的python环境中都受支持:open
os.close(os.open('FILENAME',os.O_create | os.O_BINARY))
mknod
创建常规文件,如下所示:
os.mknod(path, mode=0o600 | stat.S_IFREG) # it seems that mode argument can be omitted for regular files
嗯,不要这样做,因为它不便于携带()。如果可以,请坚持open
(即使在unix上创建文件时可能会在后台调用mknod
,性能差异也非常小)
您可以查看另一个Q&A(),其中的答案暗示了os.mknod
的不可移植性
另一个可能的区别(没有检查这一点)是,如果文件已经存在,mknod
可能会返回错误/异常,而open
会在权限允许的情况下愉快地打开文件
不要忘记,os
包中的方法依赖于操作系统。使用它们有时会将您与正在运行的系统捆绑在一起(即使可以安全地假设os.remove
和os.rename
可用,当然还有实现上的差异)
还要注意,open('FILENAME','a').close()
不一定会创建一个空文件。如果文件存在并且权限正确,则它什么也不做(a
表示追加)
- 要使用截断打开并保持100%的可移植性,请使用
open('FILENAME','w')。close()
- 一种稍微快一点的方法是在没有缓冲的情况下以二进制打开:
open('FILENAME',mode='wb',buffering=0)。close()
- 为了提高速度并降低不可移植性的风险:
也是一个选项,因为它的级别较低,并且在所有提供os.open
的python环境中都受支持:open
os.close(os.open('FILENAME',os.O_create | os.O_BINARY))
open('FILENAME',mode='wb',buffering=0)
而不是mode='w'
。对于早期的3.x(我不记得这是否仅仅意味着3.0,或3.0-3.1),对于2.x,在C stdio速度较慢的系统上,os.open
会更快(对于优化的C程序,如dd
),仍然没有滥用mknod
os.open
,是的问题。我会编辑,明目张胆地复制你的好评论。因为OP要求“快速”:可能值得一提的是open('FILENAME',mode='wb',buffering=0)
,而不是mode='w'
。对于早期的3.x(我不记得这是否仅仅意味着3.0,或3.0-3.1),对于2.x,在C stdio速度较慢的系统上,os.open
会更快(对于优化的C程序,如dd
),仍然没有滥用mknod
os.open
,是的问题。我会编辑,公然复制你的好评论。