Символы ThornÞ, þ — практически неизвестны за пределами современного исландского алфавита. Хотя они необычны, они служат интересной цели. В формате CSV значения, разделенные запятой - ,, являются стандартными. К сожалению, запятые создают множество проблем, особенно когда большие числа разделяются подобным образом.

name,balance
john,10,000
david,1,000,000
jane,100

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

nameþbalance
johnþ10,000
davidþ1,000,000
janeþ100

Хотя это изменение отлично подходит для обеспечения целостности данных, оно имеет несколько особенностей. Во-первых, символ «шип» происходит от кодировки ISO-8859–1 (Latin-1). И не 100% символов Latin-1 совместимы с UTF-8 (современный стандарт). Это становится очевидным, как только вы начинаете анализировать CSV-файл с разделителем-шипом.

Основная проблема связана с размером байта. Разделитель шипа выше 127, поэтому его нельзя преобразовать в однобайтовый символ UTF-8. Из-за этого, когда вы пытаетесь разобрать CSV-файл с разделителями, вы часто получаете весь CSV-файл в одном столбце фрейма данных, что не является предполагаемой целью.

Пример данных

Эти данные, приведенные ниже, — это то, что я использовал для создания следующих примеров.

Разбор Thorn Delimeter в R

К сожалению, я не нашел простого способа выполнить эту задачу в R. Я надеюсь, что это приведет к более элегантному решению, или, в худшем случае, оно будет продолжать беспокоить меня, пока я не найду его. В любом случае, следующая попытка работает.

Окончательная версия, безусловно, управляема. Две наиболее очевидные болевые точки: (1.) типы данных столбцов, все символы — без bueno и (2.) тот факт, что наши заголовки столбцов являются первой строкой. Ни одна из этих проблем не является серьезной, но достаточно раздражающей, чтобы найти лучшее решение. В этом стремлении я также попытался использовать метод readr read_csv() с переключением кодировки на ISO-8859-1, однако это привело к неприятному символу ISO-8859-1 3/4 вместо него. Это приводит к тому, что apply()с gsub() сопоставляется с каждым столбцом, что приводит ко многим из тех же проблем.

Разбор разделителя шипа в Python

В Python решение намного проще.

Первым примечательным является значение разделителя — юникодное представление символа шипа в нижнем регистре. Удивительно, но по какой-то причине мне не удалось заставить это значение работать в R — не знаю почему. Во-вторых, мы должны указать, что механизм синтаксического анализа как Python. Это решение обусловлено тем фактом, как упоминалось ранее, что символ шипа больше одного байта. Механизм синтаксического анализа C, используемый по умолчанию для Pandas, не поддерживает этот тип разделителей. Таким образом, если вы попробуете это без движка, указанного как Python, вы получите предупреждение, и базовый движок все равно будет переключен.