【问题标题】:How to have Python check if a file exists and create it if it doesn't?如何让 Python 检查文件是否存在,如果不存在则创建它?
【发布时间】:2013-02-06 02:33:54
【问题描述】:

如何让 Python 查看它是否需要一个文件,如果没有创建一个?

基本上我希望 Python 查找我的文件名 KEEP-IMPORTANT.txt,但是当我使用 py2app 创建我的应用程序时,它不起作用,因为它没有文件。当我尝试制作文件时它不起作用(我认为是因为 python 必须生成它)。

我希望 Python 检查文件是否存在,如果存在则不生成文件,否则生成文件。

【问题讨论】:

  • 你想对文件做什么?覆盖它?阅读?附加到它?两者都有?
  • “当我尝试制作文件时它不会工作(我认为是因为 python 必须生成它)。”几乎没有。您应该添加更多详细信息并显示您拥有的相关代码。
  • 文件需要存在就是这样
  • 应用程序可能找不到 KEEP-IMPORTANT.txt,因为应用程序的当前工作目录与您的预期不同。默认工作目录是 .app/Contents/Resources。如果文件是只读数据文件,您可以将其复制到应用程序包中(py2app 有一个选项)

标签: python file python-3.x py2app


【解决方案1】:

Similar question

这是最好的方法:

try:
    with open(filename) as file:
        # do whatever
except IOError:
    # generate the file

还有 os.path.exists(),但这可能是一个安全问题。

【讨论】:

  • 我设计了一个示例来测试这种方法的缺陷。在 python 2.7 中,权限错误会引发 IOError。我撤销了对测试文件的读取权限,但允许写入。尝试读取该文件会产生一个 IOError 并且我能够使用此异常覆盖它。这在 python 3 中不起作用,因为读取文件会产生 PermissionError。这可能是一个不太可能发生的利基场景。我想知道现有文件可能会以什么其他方式发生 IOError。
  • 如果您没有该文件的 rw 权限,不会试图破坏它只是引发另一个 IOError 吗?
  • 在 python 3 中它会引发 PermissionError。我测试了您具有写入权限但没有读取权限的不太可能的情况。在这种情况下,对于 python 2.7,读取文件引发 IOError 但我仍然可以使用写入权限对其进行写入。
  • 这个答案引入了竞争条件——在您尝试打开文件和尝试创建文件之间,该文件可能是由另一个进程创建的。正确的答案是使用正确的选项打开文件以控制写入、追加、截断等。
【解决方案2】:

这个单行将检查文件是否存在,如果不存在则创建它。

open("KEEP-IMPORTANT.txt", "a")

【讨论】:

  • +1 因为它制作了文件并且没有错误 - 但是同时删除文件的先前位呢?
  • @cutrightjm 将模式更改为“w”(写入)。将覆盖现有内容。
【解决方案3】:
import os.path
from os import path
    if path.exists('highScore.txt'):
         print("It exists")
    else:
         print("It doesn't exist")

【讨论】:

    【解决方案4】:

    如果您只想检查和创建文件而不立即写入任何内容,那么另一个干净而小型的解决方案就是这样。

    import os
    if os.path.exists(file_path) == False:
        open(file_path, "w").close
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多