"," внутри значений данных правильно экранируются внутри " "
маркеров и будут просто работать. Что неправильно, так это ваш Excel, который не использует ,
в качестве разделителя полей. IIRC, вы можете преодолеть это на стороне Excel, используя File->import
вместо того, чтобы просто пытаться открыть файл CSV. Таким образом, Excel запросит у вас параметры CSV.
В противном случае параметр средства записи CSV в Python для изменения символа разделителя является в точности «разделителем» -
К сожалению, Tabula-py - это просто оболочка вокругtabula-java вызывается через внешний процесс, и в нем нет опции для изменения символа разделителя. В противном случае, это будет вопрос добавления параметра delimiter=...
к вашему вызову.
Однако, как представляется, это самый простой способ - повторно преобразовать файл CSV, созданный на стороне Java. одному с ";"разделители после извлечения данных:
(в примере имеется довольно полная функция-обертка, но преобразование происходит только в четырех строках кода в конце)
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()