чтение CSV-файла с разделителем внутри поля с несколькими двойными кавычками - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть CSV-файл с ,, разделяющий столбцы, которые я хочу прочитать с pandas, то есть df = pd.read_csv("myfile.csv",sep=',',dtype=str,encoding='utf-8'). Столбцы бывают разных типов, но я хочу читать все как строки. Одна строка следующей формы заставляет читателя видеть в этой строке больше столбцов, чем ожидалось:

# column 1, column 2, column 3, ...
46745,"\\"\\"\\"blabla\\"\\" a, b bli\\"\\"more bla.\\"\\" bl blu \\"\\"bli bla blub\\"\\"\\"","something else",...

Некоторые поля, как второй и третий столбцы, заключены в двойные кавычки. Что отличает второе поле от других полей в двойных кавычках, так это то, что оно содержит несколько кавычек, так что когда синтаксический анализатор достигает значения ,, он не понимает, что на самом деле он все еще находится в кавычке, которую он должен был бы распознать, поскольку последний символ кавычки должен следовать за разделителем. Интересно, что когда вы передаете engine='python', парсер фактически распознал это, но вместо того, чтобы сделать вывод, что цитата просто еще не закончена, он выдает ошибку ',' expected after '"'.

Я перепробовал все виды комбинаций для ключевые аргументы quoting, quotechar, sep и engine. Все безрезультатно.

Редактировать: Пример по запросу

import io
s = 'column1,column2,column3\n3463,hello,"more, stuff"\n46745,"\\"\\"\\"blabla\\"\\" a, b bli\\"\\"more bla.\\"\\" bl blu \\"\\"bli bla blub\\"\\"\\"","something else"'
df = pd.read_csv(io.StringIO(s),sep=',',dtype=str,encoding='utf-8')

Если вы закомментируете последнюю строку, она работает.

1 Ответ

0 голосов
/ 30 апреля 2020

Обычно кавычки внутри поля экранируются другой кавычкой ("), которая может быть значением по умолчанию для синтаксического анализатора.

В этом случае вам, вероятно, нужно использовать escapechar = '\\'.

...