Как игнорировать разделитель CSV в кавычках?

1

У меня есть дамп данных CSV, который формируется следующим образом:

"field1";"{"JSON-KEY": "JSON-VALUE"}";"field3"

Если я использую считыватель CSV Python следующим образом...

csv.reader(csvfile, delimiter=';', quotechar='"')

У меня две проблемы:

(1) Когда строка JSON-VALUE содержит символ разделителя ';' Reader рассматривает его как разделитель и нарушает VALUE в двух областях.

(2) Когда (1) не является проблемой, поле JSON-VALUE неверно истолковывается, чтобы иметь меньше цитаты в начале и еще одну в конце. Например:

 ['field1','{JSON-KEY": "JSON-VALUE"}"','field3']

Эти две проблемы, вероятно, связаны, но я не могу это исправить, используя документацию Python и другие вопросы здесь. Кто-нибудь ведет к тому, что мне здесь не хватает, и как я могу настроить Reader для этого?

  • 4
    Формат CSV здесь кажется неоднозначным. Некоторые из ваших кавычек являются кавычками CSV, другие являются частью фактических данных и не могут быть экранированы. Если не существует какого-то неочевидного правила, которое вы не объяснили, единственный способ разобраться с помощью догадок. Можно ли исправить дамп данных для создания корректного файла CSV?
  • 1
    Если нет, вы можете придумать какие-то догадки, которые сработают. Например, если вы сначала просматриваете каждую строку в поисках точек с запятой, которые появляются внутри кавычек, и экранируете их с помощью escape-символа, то создаете CSV-ридер, который не использует " в качестве символа кавычки и использует этот escape-символ, эту комбинацию из двух шагов». мог бы проанализировать этот пример, и он мог бы работать на весь ваш дамп (или он может не сработать; не увидев его или не протестировав, трудно сказать).
Теги:
csv
python-3.x

1 ответ

2
Лучший ответ

Фактически, данные csv недействительны. Котировки должны быть экранированы следующим образом:

"field1";"{""JSON-KEY"": ""JSON-VALUE""}";"field3"

Если у вас нет контроля над генерации данных csv, вы можете попытаться использовать quotechar='' а затем обрезать кавычки из полей.

Если есть ; в json-данных, однако, это было бы проблематично.

Другим вариантом было бы вручную прочитать первое и последнее поле и рассмотреть данные между ними как данные json.

  • 0
    Действительно, у меня был доступ к изменению CSV, и, избегая кавычек, все работало нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню