防止csvkit修改日期/时间?

时间:2015-06-18 15:00:30

标签: python excel csv export-to-csv xlrd

我只是尝试csvkit将Excel转换为csv。但是,它没有考虑日期和时间的格式,并且从Excel自己的save-as-csv生成不同的结果。例如,这是电子表格的一行:

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的csv版本:

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

这当然毫无用处。有任何想法吗?似乎没有任何命令行选项 - no-inference没有帮助。感谢。

修改

csvkit ans xlrd似乎都考虑了格式,但他们并不聪明。在两种情况下,日期为21/02/1066作为文本字符串'21 / 02/1066'传递,但日期'22 / 04/1959'由xlrd变为'21662.0',并且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的{​​{1}}版本 - 转换会导致全部“索引超出范围”错误。 .xlsx可以处理的4个电子表格中唯一一个是in2csv个,格式为.xlsx

1 个答案:

答案 0 :(得分: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