繁体   English   中英

更改CSV中日期列的格式

[英]Change format of date column in CSV

我有以下格式的CSV文件

Column_a,Column_b,Column_c,Column_date
a,b,c,08-jun-2017 00:00 to UP (ENG)

我想转换名称为Column_date的数据

例如: 08-jun-2017 00:00 to UP (ENG)应转换为17W23D4 to UP (ENG)

格式是17世纪的一年; W23周; D4的星期几。 时间从星期一(1)到星期日(7)。

因此,最终的CSV应该如下所示:

Column_a,Column_b,Column_c,Column_date
a,b,c,17W23D4 to UP (ENG)

如果可以在.bat文件中进行操作,那将很好,但是另一种脚本语言也可以。

在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

我想转换名称为Column_date的数据

以下Python解决方案基于datetime基本的日期和时间类型文档。 请向下滚动至strftime()strptime()行为部分,以获取%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文件的读取和写入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM