【问题标题】:Write Files to tempfile.TemporaryDirectory Python将文件写入 tempfile.TemporaryDirectory Python
【发布时间】:2021-12-03 22:49:42
【问题描述】:

我想打开并写入 python 的tempfile.TemporaryDirectory() 中的文件

这是我目前的代码:

import tempfile

temp_dir = tempfile.TemporaryDirectory()

destination = temp_dir.name
file = 'concept_aliases.json'
spath = os.path.join(destination,"/",file)
with open(spath, "w+") as f::
   # do smthg

但是,我收到此错误:

PermissionError: [Errno 13] Permission denied: '/concept_aliases.json'

【问题讨论】:

  • 这可能和stackoverflow.com/questions/23212435/…是同一个问题
  • 去掉"/" 参数到os.path.join() - 该函数的全部意义在于它为您提供了适当的路径名分隔符。这里发生的是斜杠被解释为绝对路径名(到根目录);之前的所有内容都会被丢弃,并且您最终会引用根目录中的文件in(您没有写入权限)。

标签: python temporary-files


【解决方案1】:

这里的问题是斜杠/ 作为第二个参数传递给os.path.join() 方法。根据documentationjoin() 执行以下操作:

智能地加入一个或多个路径组件。返回值为 path 和 *paths 的任何成员的连接正好是一个 除最后一个以外的每个非空部分之后的目录分隔符, 这意味着如果最后一部分,结果只会以分隔符结尾 是空的。如果一个组件是绝对路径,则所有之前的组件 被丢弃并从绝对路径继续加入 组件。

然而,关键部分是以下句子:

如果组件是绝对路径,则抛出之前的所有组件 离开并从绝对路径组件继续加入。

通过将斜杠/ 作为第二个参数传递给join(),实际上您开始了一个新的绝对路径,作为回报,它会丢弃所有以前的组件。

话虽如此,在这种情况下正确的方法如下:

spath = os.path.join(destination, file)

【讨论】:

    猜你喜欢
    • 2017-09-25
    • 2020-11-30
    • 1970-01-01
    • 2020-08-26
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多