Я не понимаю, если у вас есть четкое представление о том, что вы пытаетесь получить..
Вы говорите «Я знаю (...) мой случай использования - это злоупотребление».
Но злоупотребление подразумевает, что существует возможность использования.
Однако в вашем случае невозможно использовать, то, что вы описали, невозможно, потому что то, что передается в синтаксический анализатор CSV, должно быть допустимым CSV-форматом, а ваше нет.
В правильной строке CSV большинство символов являются информацией, а некоторые символы являются метаинформацией, необходимой для интерпретации строки для извлечения информации.
Опишите, что вы хотите, чтобы персонажи "
были в общей категории информации и метаинформации. Это похоже на тех, кто хочет поймать левую руку левой рукой.
Эта проблема возникает с вашей строкой, потому что это не строка, идущая от чтения файла CSV. Это строка, написанная как есть.
Невозможно получить такую строку из чтения CSV-файла, потому что она не могла быть написана так в CSV-файле.
Если записывается в файл CSV, '"simple|split"|test'
может быть написана
"""simple|split"""|test
с doublequote
значение ИСТИНА, по умолчанию
или #"simple#|split#"|test
с doublequote = False, escapechar = '#'
.
Если вы хотите, чтобы извлечь информацию, как вы описали, вы не создать парсер, вы должны просто использовать уже существующий инструмент:
import re
reg = re.compile('".*?"|[^|]+')
print reg.findall('yoo|"simple|split"|test|end"pos|hu')
результат
['yoo', '"simple|split"', 'test', 'end"pos', 'hu']
Вы будете нужно написать собственный парсер. Кавычки являются средством выхода из данных, которые иначе не могли бы рассматриваться как один столбец и, следовательно, не считались частью вывода. –
В зависимости от того, насколько сложны данные, вы можете обманывать и использовать что-то ужасное, как 'filter (None, re.split (r '(". *? ") | \ |', S))' - или смотреть в 'pyparsing' –
Привет, я отправил ответ, в котором на самом деле я развиваю то, что сказал Марджин и Джон. Не могли бы вы сказать, почему вы не думали использовать регулярное выражение? – eyquem