当前位置: 首页 > 面试题库 >

如何在python中创建文件而不覆盖现有文件

云焱
2023-03-14
问题内容

目前,我有一个循环,试图通过在文件名字符串中添加后缀来查找未使用的文件名。一旦找不到文件,它将使用无法以该名称打开新文件的名称。问题在于此代码用于网站中,并且可能多次尝试同时执行同一操作,因此存在竞争条件。

如果在检查时间和另一个线程中的打开时间之间创建了一个文件,如何防止python覆盖现有文件。

我可以通过将后缀随机化来最小化机会,但是根据路径名的各个部分,机会已经被最小化了。我想通过一个可以告诉您的函数来消除这种机会,仅在不存在时创建此文件。

我可以使用win32函数来做到这一点,但是我希望它可以跨平台工作,因为最终它将托管在linux上。


问题答案:

os.open()os.O_CREATos.O_EXCL结合使用以创建文件。如果文件已经存在,那将失败:

>>> fd = os.open("x", os.O_WRONLY | os.O_CREAT | os.O_EXCL)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 17] File exists: 'x'

创建新文件后,使用os.fdopen()可以将句柄变成标准的Python文件对象:

>>> fd = os.open("y", os.O_WRONLY | os.O_CREAT | os.O_EXCL)
>>> f = os.fdopen(fd, "w")  # f is now a standard Python file object

编辑: 从Python
3.3,内置open()有一个x模式,意味着“打开以进行独占创建,如果文件已经存在则失败”。



 类似资料:
  • 我想知道如何覆盖现有文件,而不是在文本接收器中自动创建新文件。 例如,如果我运行模型两次,它会创建两个文件。第二个文件是使用相同的定义文件名创建的,但名称后面有一个新数字,例如modelouput.txt、modeloutput.0.txt、modeloutput.1.txt. 如何摆脱这种自动创建版本号的方式,如果现有版本号存在,就直接覆盖它。

  • 问题内容: 我想知道是否可以创建多个具有相似名称的文件,而不会覆盖当前文件。 例如:如果我有一个文件:下次创建时xyz.txt应该是:xyz(1).txt 因此,如果我重新运行该程序,则当前文件不会被覆盖。我已经尝试过,如果带有标志变量的条件将数字添加为文件名的前缀。 我想知道是否有任何Java命令来避免覆盖现有文件。 问题答案: 我想知道是否有任何本地Java命令停止覆盖[并将数字添加到文件名中

  • 问题内容: with open(“games.txt”, “w”) as text_file: print(driver.current_url) text_file.write(driver.current_url + “\n”) 我现在正在使用此代码,但是当它写入文件时,它将覆盖旧内容。我如何能简单地添加它而不删除已经存在的内容。 问题答案: 而不是使用(附加)功能模式:

  • 问题内容: 我正在尝试编写一种方法(如果尚不存在),然后制作一个“ log.txt文件”,然后将其写入该文件。我遇到的问题是每次调用该方法时,它都会覆盖现有的日志。如何更改方法,以使它不会覆盖数据而是仅更新文件? 我的写入文件方法: 问题答案: 只需更改为

  • 问题内容: 我想创建一个具有任意大小的div,然后在该div上显示一些内容。完全按照CSS中下面的div定位和调整叠加层大小的最佳方法是什么? 问题答案: 您可以使用将叠加层放置在div内部,然后在各个方向上将其拉伸,如下所示: CSS 已更新* 您只需要确保您的父div为其添加了属性,并为其设置了更低的属性。 为下面的评论者制作了一个可以在所有浏览器(包括IE7 +)上运行的演示。 从CSS中移

  • 问题内容: 目前,我正在使用此: 但是问题在于旧文件大于新文件。因此,我最终得到了一个新文件,该文件的末尾有旧文件的一部分。 问题答案: 如果您不想关闭并重新打开文件,为避免出现竞争情况,可以这样做: 该功能将很可能也更清洁和更安全的使用作为一个上下文管理器,这将关闭该文件处理程序,即使出现错误!