防止 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
没有帮助。谢谢。
编辑
csvkit
和 xlrd
似乎都考虑了格式,但他们对此并不聪明。在这两种情况下,日期 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 修改日期/时间?的主要内容,如果未能解决你的问题,请参考以下文章
jQuery Datepicker:单击日期时防止关闭选择器