防止 csvkit 修改日期/时间?

Posted

技术标签:

【中文标题】防止 csvkit 修改日期/时间?【英文标题】:Preventing csvkit from modifying dates/times? 【发布时间】:2015-09-04 07:19:35 【问题描述】:

我只是在尝试 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。但是,这是 in2csv 的 csv 版本:

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

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

编辑

csvkitxlrd 似乎都考虑了格式,但他们对此并不聪明。在这两种情况下,日期 21/02/1066 都作为文本字符串“21/02/1066”传递,但日期“22/04/1959”被xlrd 和@987654332 转换为“21662.0” @@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。它也无法处理.xlsx[m:]ss.00 版本 - 转换给出了全面的“索引超出范围”错误。 in2csv 可以处理的 4 个电子表格中唯一一个是 .xlsx 一个,格式为 [mm:]ss.00

【问题讨论】:

也在看同样的问题。根据github.com/wireservice/csvkit/pull/779,这应该现在修复,但我仍然无法在通过 pip 提供的版本中使用 --format-date 参数。我认为您可以通过直接从 git 安装来解决此问题。 很有趣 - 我会在接下来的几天里尝试一下。 【参考方案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

【讨论】:

以上是关于防止 csvkit 修改日期/时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止超出范围的日期时间值错误?

防止日期转换溢出

如何防止用户更改系统日期/时间(在 Android 中)?

jQuery Datepicker:单击日期时防止关闭选择器

防止在选定的 Jquery Datepicker 日期上选择日期

设置 minDate 以防止在开始日期之前选择结束日期