【问题标题】:How to make sure a file exists or can be created before writing to it in Python?在用 Python 写入文件之前,如何确保文件存在或可以创建?
【发布时间】:2011-04-24 12:33:36
【问题描述】:

我正在编写一个函数,我希望它可以touch 一个文件,以便我可以写入该文件。如果文件不存在,我会得到一个错误。怎么说呢?

【问题讨论】:

  • open() 文档可能很有趣。
  • 你所描述的不是touch的目的
  • touch 将更新现有文件的时间戳,如果不存在则创建一个新文件。
  • @Daenyth 抱歉。那有什么目的呢?
  • 非常具有误导性的标题!正如其他人所建议的那样,这不是touch 所做的。您可能需要考虑重新措辞!

标签: python file-io filesystems


【解决方案1】:

只需打开文件进行写入,如果文件不存在就会创建(假设您有适当的权限写入该位置)。

f = open('some_file_that_might_not_exist.txt', 'w')
f.write(data)

如果您无法打开文件进行写入,您将收到IOError

【讨论】:

  • 注意,这是详细问题的正确答案,但这不是“Python 等效的触摸”(正如问题标题可能暗示的那样)
  • 对于那些无辜地寻找 touch 的 Python 实现的人,请注意以上内容与 unix touch 无法比较,因为 使用 w 选项将删除以下内容如果文件已经存在touch 仅在文件已存在时更改时间戳。有关touch 的Python 实现,请参阅stackoverflow.com/questions/1158076/…
【解决方案2】:

Per the docs, os.utime() 如果你给它 None 作为时间参数,其功能类似于 touch,例如:

os.utime("test_file", None)

当我测试它时(在 Linux 和更高版本的 Windows 上),我发现 test_file 必须已经存在。其他操作系统上的 YMMV。

当然,这并不能真正解决写入文件的问题。正如其他答案所说,您通常需要 opentry ... except 在文件不存在时捕获异常。

【讨论】:

【解决方案3】:

如果你真的想在文件不存在的情况下引发错误,你可以使用

import os
if not os.access('file'):
    #raise error
f = open('file')
#etc.

【讨论】:

  • 我一定会最终使用它。谢谢。
  • 请注意,在调用os.access 和调用open 之间,文件可能变得不可访问。
  • @Brian,所以通常最好只使用try & except IOError?
  • @Tim McNamara:总是更好,因为无论你事先做了多少检查,它总是会发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多