以CSV格式更改日期列的格式

时间:2017-12-08 12:49:46

标签: python windows perl csv

我的CSV文件格式如下

Column_date

我想转换名为08-jun-2017 00:00 to UP (ENG)

的数据

示例:17W23D4 to UP (ENG)应转换为17

格式为世纪W23年;一年中的一周D4;星期几Column_a,Column_b,Column_c,Column_date a,b,c,17W23D4 to UP (ENG) 。日期从星期一(1)到星期日(7)。

所以最终的CSV应如下所示:

.bat

如果可以在 allprojects { repositories { jcenter() mavenCentral() maven { url "https://maven.google.com" } } } 文件中执行,那会很棒,但另一种脚本语言也可以。

2 个答案:

答案 0 :(得分:2)

在Perl中,您可以使用Time::Piece

$ perl -MTime::Piece -wE '
    $tp = Time::Piece->strptime("08-jun-2017 00:00", "%d-%b-%Y %H:%M");
    say $tp->yy, "W", $tp->week, "D", $tp->day_of_week'
17W23D4

首先,您需要从字符串中提取日期和时间。

您可以使用-F,将逗号上的每一行拆分为@F数组,然后使用正则表达式提取时间戳:

perl -MTime::Piece -F, -anE '
    print, next if $. == 1;
    ($timestring, $rest)
        = pop(@F) =~ /([0-9]{2}-[a-z]{3}-[0-9]{4} [0-9]{2}:[0-9]{2})(.*)/;
    $tp = Time::Piece->strptime($timestring, "%d-%b-%Y %H:%M");
    say join ",", @F, $tp->yy . "W" . $tp->week . "D" . $tp->day_of_week . $rest;
' -- input.csv
IIRC,在MSWin上你需要切换单引号和双引号。

有关详细信息,请参阅popperlrejoin

答案 1 :(得分:-1)

我想转换名称为Column_date

的数据

以下 Python 解决方案基于datetime — Basic date and time types文档。请向下滚动至strftime() and strptime() Behavior部分,了解%y%V%u,......指令的含义:

^^> python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)]
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from datetime import datetime
>>>
>>> ColDateOld = '08-jun-2017 00:00'   ### extract from `CSV`
>>> ColDateNew = datetime.strptime(ColDateOld, '%d-%b-%Y %H:%M').strftime("%yW%VD%u")
>>> print( ColDateNew)                 ### populate the result
17W23D4
>>>
>>>

阅读并关注CSV File Reading and Writing