【发布时间】:2011-03-17 20:36:53
【问题描述】:
对于来自不同来源的大量巨大 csv 文件(100M 行以上),我需要一个快速的 sn-p 或库来自动猜测日期格式并将其转换为分解时间或 unix 时间戳。一旦成功猜出,sn-p 必须能够检查随后出现的日期字段的有效性,因为日期格式可能会在整个文件中发生变化。
日期格式的测试集必须是可变的,但编译一个最佳决策树或从许多给定日期格式中的东西是可以的。
我得出的结论是,不存在这样的东西,但还必须进行“市场调查”,因此我的问题是。
我的第一次尝试是为迄今为止我观察到的 23 种不同的日期格式模拟 getdate(),并通过考虑日期特定特征的优化版本替换数字解析器(没有 '4' 到 '9' 在天部分的天数,月份部分的天数中没有'3'到'9'等)
有没有人遇到过类似的问题,甚至编写过类似的代码?
【问题讨论】:
-
每个 CSV 文件是否只有一种日期格式,还是混合使用?
-
通常每个文件只有一种格式,但有时他们会更改整个文件的格式,这可能是把东西放在一起的结果。您经常会看到前 9800 万行成功导入数据库,然后接下来的 4000 万行完全无用。
-
如果你有特定的日期格式会有点困难。 “060804”是 2004 年 6 月 8 日、2004 年 8 月 6 日(欧洲)还是 2006 年 8 月 4 日(yymmdd)?你可能没有这样的格式,但如果你有,你将不得不选择,你可能会发现你选择不正确。如果这是一个持续的负载,请查看您是否可以返回源并让他们修复它。如果这是一次性的事情,你将不得不蒙混过关。
-
是的,谢谢,忘了详细说明。仅从一行中就很难自动猜测日期字符串。但输入源(1/2 级报价数据)的特殊性质允许您根据数百万行进行有根据的猜测,因为数据按时间顺序排列并且至少涵盖一年。
-
我认为我要做的第一件事是查看您的 23 种日期格式列表是否对于更大的样本是完整的,一个尽可能具有代表性的样本。一般情况下的问题是无法解决的,因此您必须调整到您的实际来源。我会担心在日期格式之间切换的文件:它们也会以其他方式被破坏吗?
标签: c string date parsing format