首页 > 解决方案 > 当有两个日期时,如何从 Python 中的文件名中提取日期?我如何转换为一年中的某一天?

问题描述

我有一个文件列表,其中包含文件名中的两个日期。如何提取每个日期并将其存储到变量中?以及如何将其转换为一年中的某一天?

我的代码不起作用,因为由于某些月份以零开头,我无法提取月/日。我的代码是:

sstDataFile=AQUA_MODIS.20100101_20100131.L3m.MO.SST.sst.4km.nc

    year1=int(sstDataFile[11:15])
    day1=int(sstDataFile[15:19])
    year2=int(sstDataFile[20:24])
    day2=int(sstDataFile[24:27])
    
    print(year1)
    print(year2)
    print (day1)
    print(day2)
    if year1%4==0:
        decYr1 = year1 + day1/366.0
    else:   
        decYr1 = year1 + day1/365.0

    if year2%4==0:
        decYr2 = year2 + day2/366.0
    else:    
        decYr2 = year2 + day2/365.0
    
    decYr=0.5*(decYr1+decYr2) #decimal year between the composite start and end points

标签: pythondatedatetime

解决方案


您可以使用datetime在 python 中解析和执行日期操作:

首先,您需要稍微操作字符串以提取与日期有关的部分。假设您所有的字符串都采用相同的格式(即'SOMETHING.date1_date2.SOMETHINGELSE...'):

full_string = 'AQUA_MODIS.20100101_20100131.L3m.MO.SST.sst.4km.nc'
date1, date2 = full_string.split('.')[1].split('_')
print(date1, date2)

20100101 20100131

现在我们已经提取了我们需要将它们转换为日期时间格式的日期。您的两个字符串采用以下格式YYYYMMDD。不知何故,我们需要告诉 datetime 这是它应该使用的格式。您可以在此处查看有关此内容的更多详细信息。在我们的例子中,它应该是这样的:

fmt='%Y%m%d'  # %Y --> YYYY
              # %m --> MM
              # %d --> DD

date1 = datetime.strptime(date1, fmt)
date2 = datetime.strptime(date2, fmt)

print(date1, date2)

2010-01-01 00:00:00 2010-01-31 00:00:00

据我了解,您想以小数形式查找“平均”年份。Datetime 允许您对日期执行操作。我认为在你的情况下最好的方法是:

avg_date = datetime.fromtimestamp((date1.timestamp() + date2.timestamp()) / 2)

print(avg_date)

2010-01-16 00:00:00

最后,您希望将日期表示为年份的一小部分:

y = avg_date.year
m = (avg_date.month - 1) / 12
d = (avg_date.day - 1) / 365

result = y + m + d
print(result)

推荐阅读