Я просто пытаюсь использовать csvkit для преобразования Excel в csv. Однако он не принимает во внимание форматирование даты и времени и дает разные результаты из собственного сохранения Excel как CSV. Например, это строка электронной таблицы:
И это то, что Excel сохраняет как:
22/04/1959,Bar,F,01:32.00,01:23.00,00:59.00,00:47.23
Дата не имеет специального форматирования, а время имеет формат [mm].ss.00
. Однако это версия csv in2csv
:
1959-04-22,Bar,F,0.00106481481481,0.000960648148148,0.00068287037037,0.000546643518519
что, конечно, ни к чему. Любые идеи? Кажется, для этого нет никаких параметров командной строки - no-inference
не помогает. Спасибо.
ИЗМЕНИТЬ
И csvkit
, и xlrd
, кажется, учитывают форматирование, но они не умны в этом. Дата 21/02/1066 передается как текстовая строка «21/02/1066» в обоих случаях, но дата «22/04/1959» превращается в «21662.0» с помощью xlrd
и 1959-04-22
с помощью csvkit
. Оба они просто отказываются от небольшого прошедшего времени и проходят через представление с плавающей запятой. Это нормально, если вы знаете, что ячейка должна содержать прошедшее время, потому что вы можете просто умножить на 24*60*60
, чтобы получить правильный ответ.
Я не думаю, что xlrd
здесь сильно поможет, поскольку его функции кортежа даты обрабатывают только секунды, а не сантисекунды.
ИЗМЕНИТЬ 2
Узнал кое-что интересное. Я начал с базовой электронной таблицы, содержащей время. В одном из них я отформатировал время как [m:]ss.00
, а в другом - как [mm:]ss.00
. Затем я сохранил каждую как .xls
и .xlsx
, что дало в общей сложности 4 таблицы. Excel мог преобразовать все 4 в csv, и все время текст в csv отображался так, как было написано изначально (например, 0:21.0
для 0m 21.0s).
in2csv
вообще не справляется с двумя .xls
версиями; на этот раз отображается как 00:00:21
. Он также не может обрабатывать [m:]ss.00
версию .xlsx
- преобразование дает общую ошибку "индекс вне диапазона". Единственная из 4 электронных таблиц, которые может обрабатывать in2csv
, — это .xlsx
с форматированием [mm:]ss.00
.