我正在尝试将Excel转换为csv。但是,它没有考虑日期和时间的格式设置,也没有从Excel自己的save as 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”通过xlrd
转换为“21662.0”,通过1959-04-22
转换为csvkit
。这两个函数都放弃了很小的运行时间,并通过了float表示。如果您知道单元格应该包含经过的时间,这是可以的,因为您只需乘以24*60*60
即可得到正确的答案。我认为
xlrd
在这里没有多大帮助,因为它的date tuple函数只处理秒,而不处理厘米。编辑2
发现了一些有趣的事情。我从一个包含时间的基本电子表格开始。其中一个将时间格式化为
[m:]ss.00
,另一个将时间格式化为[mm:]ss.00
。然后我将它们分别保存为一个.xls
和一个.xlsx
,总共给出了4个电子表格。Excel可以将所有4个文本转换为csv,并且csv中的所有文本都显示为最初编写的文本(例如,对于0m21.0s)。0:21.0
根本无法处理这两个版本;这次显示为in2csv
。它也不能处理.xls
版本的00:00:21
-转换产生catch all'index out of range'错误。[m:]ss.00
可以处理的4个电子表格中只有一个是.xlsx
格式的。 最佳答案
可选的-I
参数应该可以避免这个问题。在测试样本数据时,我会得到Excel的save as生成的结果。
命令: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
关于python - 防止csvkit修改日期/时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30918974/