У меня есть 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')
Если вы закомментируете последнюю строку, она работает.