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

自动创建带有文件输出的目录

詹联
2023-03-14
问题内容

假设我要制作文件:

filename = "/foo/bar/baz.txt"

with open(filename, "w") as f:
    f.write("FOOBAR")

IOError由于/foo/bar不存在,因此给出。

自动生成这些目录的最Python方式是什么?对我来说,是否有必要显式地调用os.path.exists并且os.mkdir在每个单独的位置上调用(即/
foo,然后是/ foo / bar)?


问题答案:

os.makedirs功能执行此操作。请尝试以下操作:

import os
import errno

filename = "/foo/bar/baz.txt"
if not os.path.exists(os.path.dirname(filename)):
    try:
        os.makedirs(os.path.dirname(filename))
    except OSError as exc: # Guard against race condition
        if exc.errno != errno.EEXIST:
            raise

with open(filename, "w") as f:
    f.write("FOOBAR")

添加该try- except块的原因是为了处理在os.path.existsos.makedirs调用之间创建目录时的情况,以便保护我们免受竞争条件的影响。

在Python
3.2+中,有一种更优雅的方法可以避免上述竞争情况:

import os

filename = "/foo/bar/baz.txt"
os.makedirs(os.path.dirname(filename), exist_ok=True)
with open(filename, "w") as f:
    f.write("FOOBAR")


 类似资料:
  • 问题内容: 我正在尝试创建一个redux表单(使用redux-form),该表单可以动态创建自己的输入。我在弄清楚如何使redux- form知道已创建的新字段时遇到麻烦。是否可以动态更改redux-form在表单组件本身中传递的字段属性?我在想这个错误吗?这是我正在使用的。 问题答案: 从Redux Form 6. *开始,您可以使用来实现您想做的事情 参见下面的示例(摘自Redux文档,略有简

  • 问题内容: 如何自动创建pyi文件的样板代码? 我想创建一个保华集团的类型描述暗示文件pep484其中包含了所有的方法名。 我不要魔术。我要在自动创建文件后添加类型信息。 我想避免复制+粘贴工作。 目标:在PyCharm for Python2中键入提示。 问题答案: 就我而言,PyCharm中没有此类直接工具。但是,有用于此目的的第三方工具。 MyPy 是的,我想任何想在Python中使用编译时

  • 我想有一个gradle项目,使用自定义任务创建一个jar(不使用任何gradle java插件)。什么是正确的方法来构建build.gradle,以便我可以在我的Android应用程序的gradle项目中依赖它? 更多详情: 目前,我的jar文件是在我从gradle调用的cmake项目中创建的。我想要一个合适的体形。调用我的cmake命令的gradle文件然后使用生成的jar作为工件。然后,我希望

  • create 静态方法以只写模式(write-only mode)打开一个文件。若文件已经存在,则旧内容将被销毁。否则,将创建一个新文件。 static LOREM_IPSUM: &'static str = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut

  • 问题内容: 文件孔是文件中的空白空间,但是不占用任何磁盘空间,并且包含空字节。因此,文件大小大于其在磁盘上的实际大小。 但是,我不知道如何创建带有文件孔的文件进行试验。 问题答案: 将命令与参数一起使用。 这会为您创建一个从字节8192到字节28671的漏洞。 这是一个示例,说明该文件确实存在漏洞(该命令告诉您文件正在使用多少磁盘块): 如您所见,带孔的文件尽管大小相同,但占用的磁盘块较少。 如果

  • 问题内容: 我有一个包含我们版本号的文件,例如: 我的目标是将package.json文件中的版本号动态添加到输出文件中。例如,在javascript中,我不想手动更新版本号,但是希望在每次grunt构建之后生成与此类似的内容: 在我的Gruntfile.js配置中,有没有简单的方法可以做到这一点? 问题答案: 我实现了:https : //github.com/erickrdch/grunt-s