【问题标题】:Save svg to tempfile Python将 svg 保存到临时文件 Python
【发布时间】:2023-04-09 20:04:02
【问题描述】:

我正在使用第 3 方 python 库来创建 .svg(专门用于进化树),它具有用于树对象的 render 函数。我想要的是我可以编辑的字符串形式的svg。目前我保存svg并读取文件如下:

tree.render('location/filename.svg', other_args...)
f = open('location/filename.svg', "r")
svg_string = f.read()
f.close()

这可行,但是否可以使用临时文件代替?到目前为止,我有:

t = tempfile.NamedTemporaryFile()
tmpdir = tempfile.mkdtemp()
t.name = os.path.join(tmpdir, 'tmp.svg')
tree.render(t.name, other_args...)
svg_string = t.read()
t.close()

谁能解释为什么这不起作用和/或我如何在不创建文件的情况下做到这一点(我只需要稍后删除)。 svg_string 我继续编辑以在 django 应用程序中使用。

编辑:重要的是,渲染功能也可以用于创建其他文件类型,例如.png - 所以需要指定 .svg 扩展名。

【问题讨论】:

    标签: python django svg temporary-files


    【解决方案1】:

    您不应该为自己定义临时文件的名称。创建时,名称将随机生成。可以直接使用。

    t = tempfile.NamedTemporaryFile()
    tree.render(t.name, other_args...)
    t.file.seek(0) #reset the file pointer to the beginning
    svg_string = t.read()
    t.close()
    

    【讨论】:

    • 不错的答案,但我意识到我遗漏了一条重要信息,请检查编辑。如果我按照你的方式做,t.read() 在我打印时只是空白。
    • 对于扩展,可以使用suffix参数。 t = tempfile.NamedTemporaryFile(suffix=".svg")。如果t.read() 为空,您是否尝试使用t.file.seek(0) 行?
    • 这成功了! t.read() 之前只是空的,因为如果没有扩展,渲染功能就无法工作。如果您按照描述的方式添加后缀,则效果很好。
    • 太棒了。乐于助人。
    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 2013-11-25
    • 2016-11-09
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多