【问题标题】:Change format of date column in CSV更改 CSV 中日期列的格式
【发布时间】:2018-05-22 17:23:57
【问题描述】:

我有以下格式的 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 文件中做就好了,但另一种脚本语言也可以。

【问题讨论】:

  • 我不明白将08-jun-2017 00:00 to UP (ENG) 映射到17W23D4 to UP (ENG) 的算法/逻辑。
  • 你试过什么?这不是代码编写服务。
  • 基本上 08-jun-2017 00:00 应该改为 2017 年的第 23 周和第 4 天(星期一是一周的第 1 天)

标签: python windows perl csv


【解决方案1】:

在 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

【讨论】:

    【解决方案2】:

    我想转换名称为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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      相关资源
      最近更新 更多