Анализ csv-файла с кавычками и escape-символами

Мне нужно импортировать большие наборы данных в SQL, выходной файл (текст) - это UTC-8, созданный из программы ABAP, где я могу определить кавычки и escape-символы, по умолчанию я использую:

\ как escape-строка

" (двойные кавычки) для заключения символов в кавычки

; (полуколонка) для разделения столбцов.

Моя проблема заключается в том, что большинство столбцов, тип которых является текстом, содержит двойные кавычки или escape-символы, и при попытке импортировать это в базу данных SQL происходит сбой интерфейса из-за неправильного распределения данных столбцов.

Мне удается избежать \ n с помощью скрипта Python ниже, но я борюсь с двойными кавычками. Можете ли вы предложить какую-либо идею заменить двойные кавычки внутри символов цитирования?

Текстовые поля, такие как = банан из «Эквадора», вызывают у меня большой беспорядок, так как данные в файле CSV хранятся как «банан из« Эквадора »».

import csv
filename = "0180914_074626.csv"
with open(filename, 'r', encoding='utf8', errors='ignore') as inputfile, \
     open(filename + '.log.csv', 'w', encoding="utf8") as outputfile_log:
     w = csv.writer(outputfile_log, delimiter=';', quotechar='"', lineterminator='\n')
       for record in csv.reader(inputfile):
            #print(record)
            w.writerow(tuple(s.replace("\n", '-') for s in record))

Вам придется использовать разные символы в вашем экспорте для каждого из ваших разделителей (квалификаторы текста и разделители столбцов). Я думаю, что разделители столбцов не будут иметь значения, если вы исправите проблему с текстовыми квалификаторами. Попробуйте использовать символ, которого, как вы знаете, не будет в ваших данных. Или переключитесь на разделители табуляции или фиксированной ширины.

Brad 13.09.2018 19:39
1
1
169
1

Ответы 1

Изучите использование BCP с файлом формата.

Затем вы можете указать, что, например, последний столбец заканчивается двойной кавычкой, за которой следует CRLF. Остальные столбцы заканчиваются двойными кавычками, за которыми следует точка с запятой.

Для каждого столбца любые символы, не соответствующие комбинации символов, составляющих терминатор для этого столбца, будут проигнорированы.

Другие вопросы по теме