我正在使用 python 和 pandas 运行脚本并从我拥有的几个文件中生成一个乳胶表。
我通过导入一个 java .properties 文件(使用特殊的 unicode 转义字符以 ISO-8859-1 编码)来实现此目的,我将其称为 dictionaryFileName,其中包含用于翻译的成对值,并将它们映射到包含我想要翻译的权限的 csv 文件 (permissionFileName) 中的条目。为此,我使用 pandas 导入 csv 并对其进行管理。最后,我将它们直接导出为 latex 表格格式pandas.series.to_latex()
。
下面是我正在使用的 Python 脚本:
with open(dictionaryFileName, encoding="ISO-8859-1") as d:
commands = dict(line.split('=', 1) for line in d)
commands = {key:value.encode().decode('unicode-escape')
for key, value in commands.items()}
data = pd.read_csv(permissionFileName)
data.module_name = (data.module_name
.map(commands)
.replace('\\n', '', regex=True))
grouped_data = data.groupby(['module_name', 'group_name','permission_name']).count()
with open("../apendices/permission-table.tex", "w+") as pt:
pt.write(grouped_data.to_latex(multirow=True, longtable=True, escape=False, encoding="UTF-8"))
\input(apendices/permission-table.tex)
我将其导出为 UTF-8,因为这是我在 latex 中使用的编码。然后,我使用以下代码将表格导入 latex :
主文本
\usepackage[utf8]{inputenc}
\usepackage[english, brazil]{babel}
\begin{document}
\input{apendices/permission-table.tex}
\end{document}
权限表.tex:
\begin{longtable}{lll}
\multirow{14}{*}{Avaliação} & Página de autoavaliação & Ler \\
\end{longtable}
输入文件如下所示:
字典文件
EVALUATION=Avalia\u00e7\u00e3o
权限文件
ACTION_PLAN,GROUP_ANALYTICAL_ACTION_PLAN_REPORT,READ
但是,当我尝试编译 latex 文件时,每个特殊字符(例如上面示例中的'ç'
和'ã'
)都会引发错误消息“包 inputenc 错误:无效的 UTF-8 字节序列。”。
不过,复制文件内容,将其粘贴到另一个文件中,然后导入这个新文件,就可以解决问题。如果我在任何文本阅读器中打开该文件,所有字符都如预期的那样。
如果我使用\useRawInputEncoding
特殊字符,它们就会消失。
我希望它可以直接在 python 中运行,因为我需要经常更新这个表,如果我不必手动将一个文件复制到另一个文件中以使其运行,那会更容易。
答案1
我最终通过@Marijn 的回答找到了答案。
我实际上需要将编码设置为来自 python 的输出文件,而不是来自 pandas 的数据框。
因此,将打开的文件更改为写入以下代码即可使其工作:
with open("../apendices/permission-table.tex", "w+", encoding="UTF-8") as pt:
pt.write(grouped_data.to_latex(multirow=True, longtable=True, escape=False, encoding="UTF-8"))