Pandas to_latex 编码问题

Pandas to_latex 编码问题

我正在使用 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"))

相关内容