LoginSignup
0
1

More than 3 years have passed since last update.

2017-10-04 Python2 > AAA_20170228_030000_BBB.png に N時間を足して返す実装 > re.findall() | datetime.datetime.strptime | datetime.timedelta() | .strftime() | .join() | timedelta(hour=9.5) | re.match(r'(.*_)(\d{8}_\d{6})(_.*)', filename).group

Last updated at Posted at 2017-10-04
動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

前回: GNU coreutils > date > 20170228_23000という文字列(UTC)に9.5時間を追加してdateで識別する > echo "20170228_230000" | sed 's/_/+/g' | sed 's/0000/hours+570minutes/g' | xargs date -d

GNU dateでファイル名の日時を変換しようとしたが、どうもうまくいかないので断念。

Python実装に切り替えた。

参考

Pythonで文字列からdatetimeオブジェクトを生成する(Python3.3)

情報感謝です。

「12a345a67.8」から正規表現で、「12」と「345a67.8」をキャプチャ取得したい

良い課題の提供感謝です。

上記の変換をお試し実装したら、その実装方法が今回役に立ちました。
(re.findallの使用)

timedelta()は @shiracamus さんに教えていただきました。
(NOTE: そのコメントが検索できないため、リンクを貼ることができません。)

.join()も@@shiracamus さんに教えていただきました。(と思います)
(NOTE: そのコメントが検索できないため、リンクを貼ることができません。)

code v0.1

test_change_timezone_171004.py
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import sys
import re
import datetime as dt
import sys

# on Python 2.6.6
# coding rule: PEP8

# v0.1 Oct. 03, 2017
#   - add STR_addhour()


def STR_addhour(asrc, timediff_hour):
    # input(asrc): e.g. [XXX_yyyymmdd_hhnnss_XXX.png]
    #
    wrk = re.findall(r'[^\s_,]+', asrc)
    yyyymmdd_hhnnss = wrk[1] + " " + wrk[2]
    #print(wrk)
    #print(yyyymmdd_hhnnss)
    #sys.exit()

    adt = dt.datetime.strptime(yyyymmdd_hhnnss, '%Y%m%d %H%M%S')
    adt = adt + dt.timedelta(0, timediff_hour * 60 * 60)
    res = adt.strftime('%Y%m%d_%H%M%S')
    res = '_'.join([wrk[0], res, wrk[3]])
    return res

SRCSTR = "AAA_20170228_030000_BBB.png"

for elem in 23, 9.5, 6, 5.0:
    dst = STR_addhour(SRCSTR, timediff_hour=elem)
    print(dst)

run
AAA_20170301_020000_BBB.png
AAA_20170228_123000_BBB.png
AAA_20170228_090000_BBB.png
AAA_20170228_080000_BBB.png

正規表現はまだ慣れていないので、間違いがあるかもしれません。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1