防止csvkit修改date/时间?

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

在这里输入图像说明

而这个Excel的另存为产生:

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

date没有特殊格式,时间格式为[mm].ss.00 。 但是,这是csv的in2csv版本:

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

这当然是没有用的。 有任何想法吗? 似乎没有任何命令行选项 – no-inference没有帮助。 谢谢。

编辑

csvkitxlrd似乎都将格式考虑在内,但他们并不聪明。 在这两种情况下,通过21/02/1066的date作为文本string“21/02/1066”,但date“22/04/1959”由xlrd变为“21662.0”,而1959-04-22csvkit 。 他们两个都放弃了很短的时间,并通过了浮动表示。 如果你知道单元格应该包含经过的时间,这是好的,因为你可以乘以24*60*60来得到正确的答案。

我不认为xlrd会有很大的帮助,因为它的date元组函数只能处理秒,而不是厘秒。

编辑2

find一些有趣的东西。 我从一个包含时间的基础电子表格开始。 其中一个我把时间格式化为[m:]ss.00 ,另一个格式化为[mm:]ss.00 。 然后,我将它们保存为.xls.xlsx ,共提供4个电子表格。 Excel可以将所有4转换为csv,并且csv中的所有文本都以最初写入的forms出现(例如, 0:21.0 ,例如0m 21.0s)。

in2csv根本无法处理这两个.xls版本; 这个时间显示为00:00:21 。 它也无法处理.xlsx[m:]ss.00版本 – 转换会导致全部“索引超出范围”错误。 in2csv可以处理的4个电子表格中只有一个是.xlsx ,其中[mm:]ss.00格式。

可选的-I参数应该可以避免这个问题。 在testing您的示例数据时,我会得到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-inferenceparsingCSVinput时禁用types推断。

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