Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,当有两个日期时,如何从文件名中提取日期?我如何转换成一年中的某一天?_Python_Date_Datetime - Fatal编程技术网

在Python中,当有两个日期时,如何从文件名中提取日期?我如何转换成一年中的某一天?

在Python中,当有两个日期时,如何从文件名中提取日期?我如何转换成一年中的某一天?,python,date,datetime,Python,Date,Datetime,我有一个我正在浏览的文件列表,文件名中包含两个日期。如何提取每个日期并将其存储到变量中?我如何将它转换为一年中的某一天 我的代码不起作用,因为我无法提取月/日,因为有些月以零开头。我的密码是: sstDataFile=AQUA_MODIS.20100101_20100131.L3m.MO.SST.sst.4km.nc year1=int(sstDataFile[11:15]) day1=int(sstDataFile[15:19]) year2=int(sstDataF

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

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

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
您可以使用来解析和执行python中带有日期的操作:

首先,需要稍微操纵字符串以提取与日期相关的部分。假设所有字符串的格式都相同(例如,
“SOMETHING.date1\u date2.SOMETHINGELSE…”
):

full_string='AQUA_MODIS.20100101_20100131.L3m.MO.SST.SST.4km.nc'
date1,date2=完整的字符串。拆分('.')[1]。拆分(''.'))
打印(日期1、日期2)
20100101 20100131

现在我们已经提取了日期,我们需要将其转换为datetime格式。您的两个字符串的格式如下
YYYYMMDD
。不知何故,我们需要告诉datetime,这是它应该使用的格式。你可以看到更多的细节。在我们的例子中,它应该是这样的:

fmt='%Y%m%d'#%Y-->YYYY
#%m-->毫米
#%d-->DD
date1=datetime.strtime(date1,fmt)
date2=datetime.strtime(date2,fmt)
打印(日期1、日期2)
2010-01-01 00:00:00 2010-01-31 00:00:00

据我所知,你想用小数来计算“平均”年份。Datetime允许您对日期执行操作。我认为最好的方法是:

avg_date=datetime.fromtimestamp((date1.timestamp()+date2.timestamp())/2)
打印(平均日期)
2010-01-16 00:00:00

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

y=avg_date.year
m=(平均日期月-1)/12
d=(平均日期-1)/365
结果=y+m+d
打印(结果)

使用“确定”,但如何提取日期?这是我面临的主要问题。这有帮助吗:在使用此链接中的解决方案之前,您可能必须将字符串一分为二,如果所有文件名都遵循相同的模式,那么应该很容易