Чтение вывода csv.Sniffer ()

У меня есть файл, в котором в качестве разделителя полей используется \x01, а в качестве ограничителя строки - \x02\n. Вот пример заголовка файла:

 #export_date\x01artist_id\x01name\x01is_actual_artist\x01view_url\x01artist_type_id\x02\n

Когда я использую csv.Sniffer(), я получаю следующее:

{'module': 'csv', '_name': 'sniffed', 'lineterminator': '\r\n', 'quoting': 0, 'doc': None, 'doublequote': False, 'delimiter': '\x01', 'quotechar': '"', 'skipinitialspace': False}

Что означают следующие три поля:

  • цитирование
  • quotechar
  • двойные кавычки

В приведенном выше тексте нет кавычек, поэтому я бы предположил, что quotechar должен быть пустым, а не заключать в двойные кавычки, но любое объяснение по этим трем полям было бы замечательно.

Кроме того, я пробовал несколько других файлов и, кажется, всегда дает точный результат для этих трех полей, независимо от того, есть ли в этом файле цитирование или нет.

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
146
2

Ответы 2

Проверить документацию

  • Диалект. Двойные кавычки

Controls how instances of quotechar appearing inside a field should themselves be quoted. When True, the character is doubled. When False, the escapechar is used as a prefix to the quotechar. It defaults to True.

  • Dialect.quotechar

A one-character string used to quote fields containing special characters, such as the delimiter or quotechar, or which contain new-line characters. It defaults to '"'.

  • Диалект. Цитирование

Controls when quotes should be generated by the writer and recognised by the reader. It can take on any of the QUOTE_* constants (see section Module Contents) and defaults to QUOTE_MINIMAL.

Эти поля описаны в Диалекты и параметры форматирования документы:

  • quoting: Controls when quotes should be generated by the writer and recognised by the reader. It can take on any of the QUOTE_* constants (see section Module Contents) and defaults to QUOTE_MINIMAL.
  • doublequote: Controls how instances of quotechar appearing inside a field should themselves be quoted. When True, the character is doubled. When False, the escapechar is used as a prefix to the quotechar. It defaults to True. On output, if doublequote is False and no escapechar is set, Error is raised if a quotechar is found in a field.
  • quotechar: A one-character string used to quote fields containing special characters, such as the delimiter or quotechar, or which contain new-line characters. It defaults to '"'.

Касательно:

The above doesn't have any quoting, so I'd assume the quotechar should be empty instead of a double quote, but any explanation on these three fields would be great.

В библиотеке CPython csv.py есть комментарий, в котором говорится:

# _csv.reader won't accept a quotechar of ''`

Источник: https://github.com/python/cpython/blob/2ef69a1d45de8aa41c45d32d9ee1ff227bb1a566/Lib/csv.py#L198

В вашем случае, если нет цитирования, вы, вероятно, захотите использовать csv.QUOTE_NONE. Сниффер, вероятно, не смог бы это понять за вас.

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