Разбор строки с текстом внутри нее

Я пытаюсь прочитать и проанализировать выходной файл 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(",")

Почему бы вам не использовать существующий модуль синтаксического анализа CSV Python?

jonrsharpe 10.07.2024 14:00

Это решит ваши проблемы с анализом: docs.python.org/3/library/csv.html

Jeyekomon 10.07.2024 14:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вы можете использовать встроенный модуль 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.

Doc Tim 10.07.2024 15:46

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