2015-06-18 2 views
2

Я просто пробовал csvkit для преобразования Excel в csv. Тем не менее, он не учитывает форматирование по датам и времени и производит разные результаты из собственного save-as-csv Excel. Например, это строка таблицы:Предотвращение csvkit от изменения дат/времени?

enter image description here

И это то, что Excel Сохранит-а производит:

22/04/1959,Bar,F,01:32.00,01:23.00,00:59.00,00:47.23 

дата не имеет никакого специального форматирования, и время в формате [mm].ss.00 , Тем не менее, это версия in2csv «S из CSV:

1959-04-22,Bar,F,0.00106481481481,0.000960648148148,0.00068287037037,0.000546643518519 

, который, конечно, имеет никакой пользы вообще. Есть идеи? Кажется, для этого не существует параметров командной строки - no-inference не помогает. Благодарю.

EDIT

Оба csvkit анс xlrd, кажется, учитывают форматирование, но они не умны об этом. Дата в 21/02/1066 передается в текстовой строке «21/02/1066» в обоих случаях, но дата «22/04/1959» превращается в «21662,0» на xlrd и 1959-04-22 на csvkit. Оба они просто отказываются от небольших прошедших времен и проходят через поплавковое представление. Это нормально, если вы знаете, что ячейка должна содержать истекшее время, потому что вы можете просто умножить на 24*60*60, чтобы получить правильный ответ.

Не думаю, что xlrd будет очень полезен здесь, так как его функции даты имеют только секунды, а не сантименты.

EDIT 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 - преобразование дает ошибку «индекс за пределами диапазона». Единственная из четырех таблиц, которые может обрабатывать in2csv, - это .xlsx с [mm:]ss.00 форматированием.

+1

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

+0

Интересно - я постараюсь дать ему поехать в течение следующих нескольких дней. – EML

ответ

0

Опциональный аргумент -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

Смежные вопросы