我的代码的目标是从指定的日期开始下载GFS数据(无论是用户输入还是仅获取今天的数据),然后使用netCDF4进行下载和读取。我需要下载数据包,以便在我的代码运行时,运行时间不会超过15分钟,然后由于DOS服务器正在访问大量数据而被DOS服务器关闭。这是我到目前为止的内容:
def accessGFS():
baseURL = 'http://nomads.ncep.noaa.gov:9090/dods/gfs_0p25/'
GFSDate = int(time.strftime("%Y%m%d"))
currentHour = time.gmtime()[3]
gfsTimeHeader = 'gfs_0p25_'
if currentHour > 22:
timeURL = gfsTimeHeader + '18z'
GFSTime = 18
elif currentHour > 16:
timeURL = gfsTimeHeader + '12z'
GFSTime = 12
elif currentHour > 10:
timeURL = gfsTimeHeader + '06z'
GFSTime = 6
elif currentHour > 4:
timeURL = gfsTimeHeader + '00z'
GFSTime = 0
else:
timeURL = gfsTimeHeader + '18z'
GFSTime = 18
GFSDate -= 1
GFSDate = str(GFSDate)
GFSDateTime = datetime.datetime(int(GFSDate[:4]),int(GFSDate[4:6]),int(GFSDate[6:]),GFSTime, 0, 0)
dateURL = 'gfs' + GFSDate + '/'
url = baseURL + dateURL + timeURL
values = {}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8')
req = urllib.request.Request(url, data)
gfs_download = urllib.request.urlopen(req)
gfsData = gfs_download.read()
saveFile = open('GFS%sdata.nc' %GFSDate, 'w')
saveFile.write(str(gfsData))
saveFile.close()
gfs = Dataset(gfsData)
return GFSDateTime, gfs
然后在代码行中调用哪个:
gfs, gfsDate = GFSReader.accessGFS()
当我运行代码时,它确实访问了GFS服务器,并将文件下载到正确的文件夹中,但是却抛出错误:
FileNotFoundError: [Errno 2] No such file or directory: b'b\'<html>\\n<head>\\n
尽管有更多方法可以解决该错误。它基本上复制并粘贴了我在accessGFS()中创建的整个“ .nc”文件,并将其扔到错误代码中。这些是引用:
File "C:/Users/Desktop/Predictions/GFSDriver.py", line 65 in <module>
gfs, gfsDate = GFSReader.accessGFS()
File "C:\Users\Desktop\Predictions\GFSReader.py", line 53. in accessGFS
gfs = Dataset(gfsData)
File "netCDF4\_netCDF4.pyx", line 2111, in netCDF4._netCDF4.Dataset.__init__
File "netCDF4\_netCDF4.pyx", line 1731, in netCDF4._ensure_nc_success
所以我知道它与我下载文件的方式或通过netCDF4读取文件的方式有关,但是我不确定它是什么。该代码完全不需要下载数据,而每次调用数据集就可以工作。因此,这就是让我认为由于某些原因,netCDF4(数据集)中的功能无法读取我正确下载的文件。
有什么建议吗?