J'utilise une bibliothèque python tiers qui crée .svg
(spécifiquement pour les arbres évolutifs) qui a une fonction render
pour les objets arbre. Ce que je veux, c'est le svg
sous forme de chaîne que je peux éditer. Actuellement, je sauve le svg
et lire le fichier comme suit:Sauver svg à tempfile Python
tree.render('location/filename.svg', other_args...)
f = open('location/filename.svg', "r")
svg_string = f.read()
f.close()
Cela fonctionne, mais est-il possible d'utiliser un fichier temporaire à la place? Jusqu'à présent, j'ai:
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()
Quelqu'un peut-il expliquer pourquoi cela ne fonctionne pas et/ou comment je pouvais le faire sans créer un fichier (que je viens de supprimer plus tard). Le svg_string
Je continue à modifier pour une utilisation dans une application django.
EDIT: Important: la fonction de rendu peut également être utilisée pour créer d'autres types de fichiers, par ex. .png
- l'extension .svg
doit donc être spécifiée.
Belle réponse mais j'ai réalisé que j'avais oublié une information importante, vérifiez le montage. Si je le fais à votre façon, le 't.read()' est juste vide lorsque je l'imprime. – edc505
Pour l'extension, vous pouvez utiliser le paramètre 'suffix'. 't = tempfile.NamedTemporaryFile (suffixe =". svg ")'. Si 't.read()' est vide, avez-vous essayé avec la ligne 't.file.seek (0)'? – Patrick
Cela a fait l'affaire! Le '' t.read() '' n'était vide que parce que la fonction de rendu ne fonctionnait pas sans l'extension. Fonctionne parfaitement si vous ajoutez le suffixe de la manière que vous décrivez. – edc505