将制表符分隔符更改为另一个字符

Change tabula separator to another character

我需要从 pdf 中捕获一些数据并输入到 excel 文件中,但是要创建一个宏来组织单元格,我需要除“,”。因为一些价值数据需要“,”来表示美分。有任何想法吗 ? (“/”或“-”等字符即可解决问题)

当我将 pdf 转换为 csv 时,所有数据都位于一个单元格中,这就是我需要使用宏的原因。 How my data is organized into excel

from tabula import read_pdf
from tabula import convert_into
convert_into("B.pdf", "BBBBB.csv", output_format="csv", pages=1,coding = 'latin-1',stream=True, guess = False ,
         area = (306.9,253,379,570),
         columns = (347,399.1,443.4,481.6,514.3,543.5,572))

数据值中的“,”已在 " " 标记内正确转义,并且可以正常工作。问题是您的 Excel 没有使用 , 作为字段分隔符。 IIRC,您可以在 Excel 方面通过使用 File->import 而不是仅仅尝试打开 CSV 文件来克服这个问题。这样 Excel 将提示您输入 CSV 参数。

否则,更改分隔符的 Python CSV writer 参数正好是 "delimiter" -

不幸的是,Tabula-py 只是通过外部进程调用的 tabula-java 的包装器,并且不接受更改分隔符的选项。否则,这将是添加一个 delimiter=... 的问题 您通话中的参数。

然而,最简单的方法似乎是将 Java 端生成的 CSV 文件重新转换为带有“;”的文件。提取数据后的分隔符:

(示例包装函数比较完整,但是最后四行代码就完成了转换)


import csv
from pathlib import Path
from tabula import read_pdf
from tabula import convert_into


def convert(input_file, output_file, encoding="latin1", area=None, columns=None, delimiter=";"):
    if area is None:
        area = (306.9, 253, 379, 570)
    if columns is None:
        columns = (347, 399.1, 443.4, 481.6, 514.3, 543.5, 572)

    if delimiter != ",":
        final_output = Path(output_file)
        # temporary name
        output_file = final_output.parent / (final_output.stem + "_tmp" + final_output.suffix)

    # perform the actual data extraction and CSV output
    convert_into(
        input_file,
        output_file,
        output_format="csv",
        pages=1,
        coding="latin-1",
        stream=True,
        guess=False,
        area=area,
        columns=columns,
    )

    if delimiter != ",":
        # if needed, convert the CSV file to use the required delimiters:
        try:
            with open(output_file) as tabula_csv, open(final_output) as final_csv:
                reader = csv.reader(tabula_csv)
                writer = csv.writer(final_csv, delimiter=delimiter)
                writer.writerows(reader)
        else:

            # if everything was ok on conversion, remove temporary file:
            output_file.unlink()

如果您想继续使用 convert_into,您可以设置 output_format="tsv",它将 table 转换为制表符分隔格式。 https://tabula-py.readthedocs.io/en/latest/tabula.html#tabula.wrapper.convert_into 除此之外,您可以使用 read_csv 转换为 DataFrame,然后使用 df.to_csv 并设置定界符。