разбор кавычек и экранирование символов CSV-файла - PullRequest
0 голосов
/ 13 сентября 2018

Мне нужно импортировать большие наборы данных в 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))

1 Ответ

0 голосов
/ 13 сентября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...