You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Tabula转换PDF生成的CSV指定utf-8或cp1252编码?

解决Tabula批量转换PDF到CSV的编码问题

原代码直接用tabula.convert_into生成CSV,但这个方法没有提供指定编码的参数,导致出现编码相关错误。要生成utf-8或cp1252编码的CSV,得换个思路:先读取PDF里的表格数据,再手动指定编码写入文件。下面提供两种可行方案:

方案一:用Pandas指定编码(推荐)

借助Pandas的to_csv方法可以直接指定编码,同时还能方便处理多表格合并:

import os
import glob
import tabula
import pandas as pd

path = "/Users/username/Downloads/"
for filepath in glob.glob(path + '*.pdf'):
    # 处理文件名,避免生成类似xxx.pdf.csv的冗余文件名
    name = os.path.basename(filepath).replace('.pdf', '')
    # 读取PDF所有页面的表格,支持多表格
    table_list = tabula.read_pdf(filepath, pages="all", multiple_tables=True)
    if table_list:
        # 合并所有表格(如果不需要合并,可单独处理每个表格)
        combined_table = pd.concat(table_list, ignore_index=True)
        # 写入CSV,指定utf-8编码;要cp1252的话把encoding改成'cp1252'
        combined_table.to_csv(f"{path}{name}.csv", encoding='utf-8', index=False)

方案二:用原生CSV模块指定编码

如果不想依赖Pandas,用Python内置的csv模块也能实现:

import os
import glob
import tabula
import csv

path = "/Users/username/Downloads/"
for filepath in glob.glob(path + '*.pdf'):
    name = os.path.basename(filepath).replace('.pdf', '')
    table_list = tabula.read_pdf(filepath, pages="all", multiple_tables=True)
    if table_list:
        # 打开文件时指定编码,newline=''避免空行问题
        with open(f"{path}{name}.csv", 'w', encoding='utf-8', newline='') as csv_file:
            writer = csv.writer(csv_file)
            # 写入第一份表格的表头
            writer.writerow(table_list[0].columns.tolist())
            # 遍历所有表格,写入数据行
            for table in table_list:
                writer.writerows(table.values.tolist())
        # 如需cp1252编码,修改encoding参数即可

两个方案都能解决编码错误问题,按需选择即可。

内容的提问来源于stack exchange,提问作者Kenny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:41:32