Как решить проблему чтения csv файлов, выгруженных из PLSQL Developer?
Часто в работе мы сталкиваемся с неприятной особенностью выгрузок CSV через инструмент PL SQL Developer – «сохранение в файл csv результата выполнения запроса».
Для дальнейшего анализа выгруженный файл csv обычно требуется загрузить в pandas.dataframe или в другую СУБД.
При попытке загрузки файла мы сталкиваемся с неприятными ошибками вроде нечитаемых символов, которые pandas не может соотнести с таблицей кодировки: OSError: Initializing from file failed.
Как мы решаем этот вопрос?
Исследуем вопрос, проведем анализ данных csv файла.
Прочитаем несколько срок из файла и выведем результат в консоль:
Код:
- в данном случае указываем обязательный атрибут errors='ignore', который помогает игнорировать символы, не совпадающие с таблицей кодировки.
Вывод:
Вывод в консоль в бинарном варианте чтения:
Вывод:
Обратите внимание на первые 2 символа '?' (бинарный вариант i\xbb?). Именно они мешают методу pandas.read_csv корректно прочитать файл в DataFrame, а так же препятствуют загрузки файла в СУБД.
Далее рассмотрим три варианта решения.
Вариант первый
Если файл размера до 1.2 ГБ – файл открывается стандартным блокнотом.
Решение: Открыть файл – удалить первые два символа – сохранить и использовать в pandas/СУБД.
Вариант второй
Установить навороченный текстовый редактор, например – EmEditor работающий с большими текстовыми файлами. Открыть файл – удалить первые два символа – сохранить и использовать в pandas/СУБД.
Вариант третий для знающих Python
Csv – это текстовый файл, последовательность символов. Решение, предложенное ниже использует встроенные библиотеки. Оно заключается в построчном чтении строк, при этом первая строка обрезается с левой стороны на 2 символа следующей конструкцией row = row[2:].
На выходе получаем обработанный файл, сохраненный в указанной директории.
pathRead – указываем путь к файлу, содержащему недопустимые символы,
pathWrite – указываем пусть сохранения обработанного файла
Код:
Обработанный файл можно использовать в pandas/СУБД.
Я сильно посмеюсь когда вы стандартным блокнотом откроете 1 гб файл
Столкнулся с такой же проблемой при импорте csv в tableau, нужная вам кодировка windows-1251, UTF-8 не подходит для csv из PL SQL Developer
Спасибо!!!