Я пытаюсь прочитать и проанализировать выходной файл CSV из PostgreSQL, но в данных есть некоторые странности. Данные содержат сведения об автомобиле. Одна из проблем связана со старыми Land Rover, модели которых измеряются в дюймах, например. 100". PostgreSQL выводит это как "100'"" - в качестве escape-символа используется одинарная кавычка. REGXXXX,LAND ROVER,"100"",1973-11-16,Дизель,2500,Серебристый Я пробовал csv.reader, но при достижении значения «100» выдается ошибка, даже если я указываю кодировку = «utf8».
Я могу просто открыть его как текстовый файл (используя кодировку="utf8"), брать построчно и использовать функцию разделения(","), которая обрабатывает дюймы, хотя на каждом конце все еще есть речевые метки: ['LAND РОВЕР', '"100'""']
Однако теперь у меня возникла проблема: в описании некоторых моделей есть запятая - например. «R1, STREETFIGHTER» неправильно разделяется на «R1» и «STREETFIGHTER» (я не проверял, делает ли csv.reader то же самое). REGXXXX,YAMAHA,"R1, STREETFIGHTER",02 апреля 2002 г.,Бензин,998,Белый
Как я могу проанализировать строку, не разделяя текст внутри речевого знака? Или мне просто нужно составить свою собственную процедуру?
in_file = open(in_folder + in_file, "r", encoding = "utf8")
for line in in_file:
row_list = line.split(",")
Это решит ваши проблемы с анализом: docs.python.org/3/library/csv.html
Для этого вы можете использовать встроенный модуль csv. Вам просто нужно указать escapechar при создании средства чтения следующим образом:
from pathlib import Path
import csv
FILE = Path("~/Python/cars.csv").expanduser()
with FILE.open(mode = "r", newline = "") as f:
for row in csv.reader(f, escapechar = "'"):
print(row)
Вывод для контента, показанного в OP:
['REGXXXX', 'LAND ROVER', '100"', '1973-11-16', 'Diesel', '2500', 'Silver']
Спасибо, мне нужен был именно escapechar. Я искал не там, где искал - пытался найти функцию .open.
Почему бы вам не использовать существующий модуль синтаксического анализа CSV Python?