我的文件中有时间戳记
peakdata_20180821_1615.bz2
我正在抓取数据,因此我需要从几个月开始为每个时间戳添加15分钟。 问题是我缺少某些文件的数据,因此我想每天仅增加15分钟,例如从8月到10月。
for root, dirnames, files in os.walk(r"c:\ahmed\SpeedFT-meter1\peakdata"):
for j in dirnames:
for i in range(96):
s = datetime.strptime(j, '%Y-%m-%d') + timedelta(minutes=15)
timeStamps.append(s)
directoary_names.append(root + r'\'' + 'peakdata_' + s.strftime("%Y%m%d_%M%H"))
答案 0 :(得分:2)
首先,从文件名中提取包含日期时间的字符串。你已经说对了。然后,将字符串转换为Python datetime
对象。最后,添加15分钟的timedelta
:
>>> from datetime import datetime, timedelta
>>> datetime.strptime('20180821_1615', '%Y%m%d_%H%M')
datetime.datetime(2018, 8, 21, 16, 15)
>>> datetime.strptime('20180821_1615', '%Y%m%d_%H%M') + timedelta(minutes=15)
datetime.datetime(2018, 8, 21, 16, 30)
答案 1 :(得分:0)
这是一个可以满足您需求的功能
def new_name(file, low=datetime(2018, 8, 1), high=datetime(2018, 9, 1)):
""" Transform a filename of the form `peakdata_%Y%m%d_%H%M.bz2` to one 15 minutes
later if it sits within the specified time range (August 2018 by default).
Returns None on failure
"""
try:
dt = datetime.strptime(file, "peakdata_%Y%m%d_%H%M.bz2")
except ValueError:
return
if low <= dt <= high:
return (dt + timedelta(minutes=15)).strftime("peakdata_%Y%m%d_%H%M.bz2")
只需将其应用于您获得的每个文件,然后如果不是None
,os.rename
该文件。