python - 当有两个日期时,如何从 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
解决方案
您可以使用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)
推荐阅读
- c++ - C++ 解决与遗留未命名命名空间的冲突
- python - 安装错误:在 Windows 上安装底图
- ruby-on-rails - 如何在 Rails 中使用自定义 Bulma 主题
- r - 左连接满足条件的 LHS 行上的两个表,将其他表保留为 NA
- bash - 如何在当前目录中找到具有匹配文本的所有文件(不包括父目录和递归目录)?
- python - Django:添加 ForeignKey limit_choices_以关联另一个或相同的模型实例
- crystal-reports - 如何使用水晶报表的服务帐户连接到sql server datasouce?
- swift - 无法解释的点击手势行为
- c# - 具有类型的属性的二进制序列化转换
- c - 分段错误:在套接字编程中收到 11