如何轻松将具有奇怪date格式的CSV转换为指定的格式?

这是一个比编程更多的数据相关的问题,但我不知道还有什么地方可以发布。 如果它更适合其他地方,更改器可以自由移动它。

我试图导入银行导出的CSV到GNUcash,但GNUcash只采用特定的date格式,如YYYY-MM-DD(1999-05-16),而我的银行只出口YYYYMMDD(19990516)。

我不知道最简单/最方便的方法是转换文件使用。 写一个脚本和/或使用复杂的正则expression式似乎是过度的,但可能是必要的?

我试图将其加载到LibreOffice Calc和MS Excel中,但找不到任何转换选项; 使用自定义的YYYYMMDD格式格式化单元格会打破输出。 我希望有一个更简单的方法来解决这个问题。 如果没有,我可能只是写了这个脚本,并把它放在网上的地方。

你可以用记事本2打开你的CSV,勾选regular expression search并replace。

如果date写在双引号和逗号之间:

 ,"([12][90][901]\d)([01]\d)([0123]\d)", 

 ,"\1-\2-\3", 

对于任何更复杂的事情,Excelmacros或Ruby可以帮助你。

GNUcash是正确的 – ISO格式更好。

但几乎任何脚本工具或语言都有这方面的function。 在最基本的层面上,我们有GNUdate:

 $ date --date=20161223 +%Y-%m-%d 2016-12-23 $ 

无论你最终做什么,请不要使用date的正则expression式。 使用date和时间计算可能会非常棘手,如果没有未成年人,可能需要使用更多更咸的语言。 使用可以parsing和格式化date的库。 有很多select。

我第二个转换csv的build议。 如果你可以/想要使用R,那么anytime包就会读取没有格式string的date(和date时间),而date的默认格式就是你所需要的。 Python也具有function强大的库,其他大多数脚本(和编译)语言也是如此。

您可以使用LibreOffice Calc或MS Excel打开文件,然后使用公式转换date列。

假设在A1中有19990516,然后用下面的公式转换为= date(left(A1,4),mid(A1,5,2),right(A1,2))