将svg保存到临时文件Python
我正在使用一个第三方python库来创建将svg保存到临时文件Python,python,django,svg,temporary-files,Python,Django,Svg,Temporary Files,我正在使用一个第三方python库来创建.svg(专门用于进化树),该库为树对象提供了一个渲染函数。我想要的是字符串形式的svg,我可以编辑它。目前,我保存了svg,并按如下方式读取该文件: tree.render('location/filename.svg', other_args...) f = open('location/filename.svg', "r") svg_string = f.read() f.close() 这是可行的,但是否可以改用临时文件?到目前为止,我已经: t
.svg
(专门用于进化树),该库为树对象提供了一个渲染
函数。我想要的是字符串形式的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\u字符串
我继续编辑,以便在django应用程序中使用
编辑:重要的是,渲染功能还可用于创建其他文件类型,例如
.png
——因此需要指定.svg
扩展名。您不应自行定义临时文件的名称。创建时,将随机生成名称。你可以直接使用它
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()
只是空白。对于扩展,您可以使用后缀
参数t=tempfile.NamedTemporaryFile(后缀=“.svg”)
。如果t.read()
为空,是否尝试使用t.file.seek(0)
行?这就成功了!t.read()
之前是空的,因为如果没有扩展,渲染函数无法工作。如果你按照你描述的方式添加后缀,效果会很好。太好了。很乐意帮忙。