Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中os.mknod()和open(';FILENAME';,';a';)之间的区别、速度和实现是什么? 我想用python创建一个空文件。_Python - Fatal编程技术网

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
    也是一个选项,因为它的级别较低,并且在所有提供
    open
    的python环境中都受支持:
    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
    也是一个选项,因为它的级别较低,并且在所有提供
    open
    的python环境中都受支持:
    os.close(os.open('FILENAME',os.O_create | os.O_BINARY))

你在语义上的对等是错误的。我不知道您在哪里见过mknod,但它不是用于创建普通文件的。它是用于设备文件的。所以你把苹果比作月亮饼。你在语义上的对等是错误的。我不知道您在哪里见过mknod,但它不是用于创建普通文件的。它是用于设备文件的。所以你在这里比较苹果和月亮饼。因为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
,是的问题。我会编辑,明目张胆地复制你的好评论。因为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
,是的问题。我会编辑,公然复制你的好评论。