Я получаю обычные CSV-файлы, разделенные запятыми, с данными, имеющими символ новой строки.
Входные данные
Я хочу преобразовать входные данные в:
- Pipe (| ) с разделителями
- Без кавычек для экранирования ("или")
- Трубка (|) внутри данных, экранированных символом вставки (^)
Мой файл может также содержат несколько строк данных (или данных в новой строке в одной строке).
Ожидаемые выходные данные
Выходной файл I смог сгенерировать.
Как вы можете видеть на изображении, каретка (^) отлично экранировала все каналы (|) в данных, но также экранирование символа новой строки в 5-й и 6-й строке, что мне не нужно.
ПРИМЕЧАНИЕ. Все символы возврата каретки (\ r или CR) и символы новой строки (\ n, LF) должны быть такими, как есть. как показано на изображениях.
import csv
import sys
inputPath = sys.argv[1]
outputPath = sys.argv[2]
with open(inputPath, encoding="utf-8") as inputFile:
with open(outputPath, 'w', newline='', encoding="utf-8") as outputFile:
reader = csv.DictReader(inputFile, delimiter=',')
writer = csv.DictWriter(
outputFile, reader.fieldnames, delimiter='|', quoting=csv.QUOTE_NONE, escapechar='^', doublequote=False, quotechar="")
writer.writeheader()
writer.writerows(reader)
print("Formationg complete.")
Приведенный выше код был написан на Python, было бы здорово, если бы я мог получить помощь на Python. Ответы на других языках программирования также принимаются.
Терм Более 8 миллионов записей
Ниже приведены некоторые примеры данных:
"VENDOR ID","VENDOR NAME","ORGANIZATION NUMBER","ADDRESS 1","CITY","COUNTRY","ZIP","PRIMARY PHONE","FAX","EMAIL","LMS RECORD CREATED DATE","LMS RECORD MODIFY DATE","DELETE FLAG","LMS RECORD ID"
"a0E6D000001Fag8UAC","Test 'Vendor' 1","","This Vendor contains a single (') quote.","","","","","","test@test.com","2020-4-1 06:32:29","2020-4-1 06:34:43","false",""
"a0E6D000001FagDUAS","Test ""Vendor"" 2","","This Vendor contains a double("") quote.","","","","","","test@test.com","2020-4-1 06:33:38","2020-4-1 06:35:18","false",""
"a0E6D000001FagIUAS","Test Vendor | 3","","This Vendor contains a Pipe (|).","","","","","","test@test.com","2020-4-1 06:38:45","2020-4-1 06:38:45","false",""
"a0E6D000001FagNUAS","Test Vendor 4","","This Vendor contains a
carriage return, i.e
data in new line.","","","","","","test@test.com","2020-4-1 06:43:08","2020-4-1 06:43:08","false",""
ПРИМЕЧАНИЕ. Если вы копируете вышеуказанные данные, убедитесь, что 5-я и 6-я строки должны заканчиваться только LF (т. е. Новая строка, \ n), как показано на изображениях, или, пожалуйста, попробуйте повторить эти 2 строки, поскольку именно в этом и заключается вопрос о том, чтобы не избежать этих 2 строк специально, как показано на рисунке ниже.
Приведенный выше код является окончательным результатом всех моих выводов по inte rnet. Я даже попробовал библиотеку pandas, и ее окончательный вывод такой же.