Запретить csvkit изменять дату/время?

Я просто пытаюсь использовать 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.


person EML    schedule 18.06.2015    source источник
comment
Тоже рассматриваю ту же проблему. Согласно github.com/wireservice/csvkit/pull/779, это должно быть исправлено. , но я все еще не могу использовать параметр --format-date в версии, предоставленной через pip. Я думаю, вы сможете решить эту проблему, установив прямо из git.   -  person Cninroh    schedule 20.02.2017
comment
Интересно - попробую в ближайшие дни.   -  person EML    schedule 20.02.2017


Ответы (1)


Необязательный аргумент -I должен работать, чтобы избежать этой проблемы. При тестировании ваших выборочных данных я получаю то, что создает Excel для сохранения.

Команда: in2csv sample.csv -I > sample-output-i.csv

Выход: 22/04/1959,Bar,F,01:32.00,01:23.00,00:59.00,00:47.23

-I, --no-inference Отключите определение типа при разборе входных данных CSV.

https://csvkit.readthedocs.io/en/latest/scripts/in2csv.html

person Joe Larson    schedule 07.08.2017