2022-12-25, 22:38
Vor kurzem bin ich gefragt worden, wie man mit jinja2 Umlaute rendern kann. Grundsätzlich hatte ich auch angenommen, dass dies wegen Unicode und so kein Problem sein kann, konnte aber das aufgetretene Problem „öäüÖÜÄ,“ nachstellen.
Die Lösung war dann die folgende:
from jinja2 import Environment, BaseLoader
myString = 'öäü{{hello}}'
template = Environment(loader=BaseLoader).from_string(myString)
with open('render2.tex','wb') as output:
x = template.render(hello='ÖÜÄ')
output.write(x.encode('utf-8')) |
from jinja2 import Environment, BaseLoader
myString = 'öäü{{hello}}'
template = Environment(loader=BaseLoader).from_string(myString)
with open('render2.tex','wb') as output:
x = template.render(hello='ÖÜÄ')
output.write(x.encode('utf-8'))
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
2021-12-23, 20:14
Angenommen, wir haben eine Excel-Datei Daten.xlsx
mit Werten, die in ein entsprechendes XML-Dokument überführt werden müssen.
Mit Python und der Jinja2 Template-Engine ist das flink gemacht. Zuerst definieren wir das Template template.xml
:
<?xml version='1.0' encoding='UTF-8'?>
<table name="Tablename">
{% for _,row in data.iterrows() %}
<ROW>
<COLUMN1>{{row['column1']}}</COLUMN1>
<COLUMN2>{{row['column2']}}</COLUMN2>
<COLUMN3>{{row['column3']}}</COLUMN3>
</ROW>
{% endfor %}
</table> |
<?xml version='1.0' encoding='UTF-8'?>
<table name="Tablename">
{% for _,row in data.iterrows() %}
<ROW>
<COLUMN1>{{row['column1']}}</COLUMN1>
<COLUMN2>{{row['column2']}}</COLUMN2>
<COLUMN3>{{row['column3']}}</COLUMN3>
</ROW>
{% endfor %}
</table>
Dann definieren wir den Python-Code:
import pandas as pd # data wrangling
import jinja2 # template engine
import os # for file-related stuff
# create jinja env that can load template from filesystem
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(os.path.abspath('.')))
df = pd.read_excel('Daten.xlsx')
template = jinja_env.get_template('template.xml')
with open('FertigesXML.xml','w') as output:
output.write(template.render(data=df)) |
import pandas as pd # data wrangling
import jinja2 # template engine
import os # for file-related stuff
# create jinja env that can load template from filesystem
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(os.path.abspath('.')))
df = pd.read_excel('Daten.xlsx')
template = jinja_env.get_template('template.xml')
with open('FertigesXML.xml','w') as output:
output.write(template.render(data=df))
Lassen wir den Python-Code laufen, so erhalten wir das folgende XML:
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
2014-01-05, 22:37
Ich bereite momentan die Spendenquittungen der Dingfabrik mit Python, Jinja2, MySQL und LaTeX auf. Um den SQL Code sauber zu halten, lagere ich einiges aus dem Python-Code in MySQL Funktionen aus.
Hier ein einfaches Beispiel, das basierend auf Parametern für Mitglieds-ID und Namenstyp entweder der Vornamen, Nachnamen oder kompletten Namen eines Mitglieds zurückgibt.
DROP FUNCTION IF EXISTS fs_getname;
DELIMITER $$
CREATE FUNCTION fs_getname(nummer INT, typ CHAR)
RETURNS VARCHAR(100)
NOT DETERMINISTIC
BEGIN
IF typ = 'c' THEN
RETURN (SELECT TRIM(CONCAT(COALESCE(Vorname,"")," ",COALESCE(Name," "))) FROM Stammdaten WHERE ID = nummer);
ELSEIF typ = 'f' THEN
RETURN (SELECT COALESCE(Vorname,"") FROM Stammdaten WHERE ID = nummer);
ELSEIF typ = 'l' THEN
RETURN (SELECT COALESCE(Name,"") FROM Stammdaten WHERE ID = nummer);
END IF;
END$$
DELIMITER ; |
DROP FUNCTION IF EXISTS fs_getname;
DELIMITER $$
CREATE FUNCTION fs_getname(nummer int, typ char)
RETURNS VARCHAR(100)
NOT DETERMINISTIC
BEGIN
IF typ = 'c' THEN
RETURN (SELECT TRIM(CONCAT(Coalesce(Vorname,"")," ",Coalesce(Name," "))) FROM Stammdaten WHERE ID = nummer);
ELSEIF typ = 'f' THEN
RETURN (SELECT Coalesce(Vorname,"") FROM Stammdaten WHERE ID = nummer);
ELSEIF typ = 'l' THEN
RETURN (SELECT Coalesce(Name,"") FROM Stammdaten WHERE ID = nummer);
END IF;
END$$
DELIMITER ;
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website