gpt4 book ai didi

python - os.mknod() 和 open ('FILENAME' , 'a' ) 在 python 中有什么区别、速度和实现?

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:40 25 4
gpt4 key购买 nike

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

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

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

What is the difference, in terms of speed and implementation between these two methods?

Would you recommend any other, more reliable or faster method to create an empty file?

最佳答案

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

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

好吧,不要这样做,因为它不可移植 (Unix only)。尽可能坚持open(即使mknod 可能在unix 上创建文件时在后台调用,性能差异非常小)

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

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

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

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

  • 要以截断方式打开并保持 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))

关于python - os.mknod() 和 open ('FILENAME' , 'a' ) 在 python 中有什么区别、速度和实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51830145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com