[Tutor] raw_input() slice list

bob gailer bgailer at gmail.com
Wed Sep 28 08:13:20 CEST 2011


On 9/27/2011 11:18 PM, questions anon wrote:
> I would like to use user_input() to decide how to slice a list.
> This works fine until I try to leave it blank to try and select the 
> whole list [:]
> I have posted the section of interest below and the error I get when I 
> try to press enter. Further below that is the entire code.
> Any feedback will be greatly appreciated.
> *
> section of code of interest:*
>         startperiod=int(raw_input("Start slice (e.g. 1 ): "))
>         endperiod=int(raw_input("End slice (e.g. 2): "))
>         skipperiod=int(raw_input("skip slice (e.g. 1): "))
>
>         if startperiod=="" and endperiod=="" and skipperiod=="":
>                 startperiod=""
>                 endperiod=""
>                 skipperiod=""
>
int() expects a character representation of an integer. An empty string 
will raise the exception you reported.

startperiod will NEVER == "", as it will be an integer.

The entire if statement does nothing! Discard it.

Defer applying int().

Then you can check startperiod etc for equality to "".

if startperiod == "":
   startperiod = None
else:
   startperiod = int(startperiod)
if endperiod == "":

   endperiod = None
else:
   endperiod = int(endperiod)
if skipperiod == "":
   skipperiod = None
else:
   skipperiod= int(skipperiod)

AND BE PREPARED to catch & handle exceptions in case user enters a 
non-integer value.
>
>         for (path, dirs, files) in os.walk(MainFolder):
>                         for dir in dirs:
>                                 print dir
>                         path=path+'/'
>
>                         for ncfile in files:
>                                 if ncfile[-3:]=='.nc':
>                                     print "dealing with ncfiles:", 
> path+ncfile
>                                     ncfile=os.path.join(path,ncfile)
>                                     ncfile=Dataset(ncfile, 'r+', 
> 'NETCDF4')
>                                     
> variable=ncfile.variables[ncvariablename][:]
>                                     TIME=ncfile.variables['time'][:]
>                                     
> fillvalue=ncfile.variables[ncvariablename]._FillValue
>                                     ncfile.close()
>
>                                     for variable, TIME in 
> zip((variable[startperiod:endperiod:skipperiod]),(TIME[startperiod:endperiod:skipperiod])):
>
>
> *the error:*
>
> Traceback (most recent call last):
>   File "<pyshell#27>", line 1, in <module>
>     plotrawdata('TSFC')
>   File "D:\My Dropbox\Python_code\functions.py", line 39, in plotrawdata
>     startperiod=int(raw_input("Start slice (e.g. 1 ): "))
> ValueError: invalid literal for int() with base 10: ''
>
>
> *THE WHOLE PROGRAM:*
> from netCDF4 import Dataset
> import numpy as N
> import matplotlib.pyplot as plt
> from numpy import ma as MA
> from mpl_toolkits.basemap import Basemap
> from netcdftime import utime
> from datetime import datetime
> import os
> import matplotlib.colors as mc
> import matplotlib.colorbar as c
>
> OutputFolder=r"D:/DSE_work/temp_samples2/"
> MainFolder=r"D:/DSE_work/temp_samples2/"
>
>
> def plotrawdata(variable):
>         if variable=='TSFC':
>                 ncvariablename='T_SFC'
>                 MainFolder=r"D:/DSE_work/temp_samples2/"
>                 ticks=[-5,0,5,10,15,20,25,30,35,40,45,50]
>                 Title='Surface Temperature'
>
>         elif variable=='RHSFC':
>                 ncvariablename='RH_SFC'
>                 
> MainFolder=r"E:/DSE_BushfireClimatologyProject/griddeddatasamples/temp_samples6/"
>                 ticks=[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 101]
>                 Title='Surface RH'
>
>         
> fileforlatlon=Dataset("D:/DSE_work/temp_samples2/2020/01/IDZ00026_VIC_ADFD_T_SFC.nc", 
> 'r+', 'NETCDF4')
>         LAT=fileforlatlon.variables['latitude'][:]
>         LON=fileforlatlon.variables['longitude'][:]
>
>         startperiod=int(raw_input("Start slice (e.g. 1 ): "))
>         endperiod=int(raw_input("End slice (e.g. 2): "))
>         skipperiod=int(raw_input("skip slice (e.g. 1): "))
>
>         if startperiod=="" and endperiod=="" and skipperiod=="":
>                 startperiod=str("")
>                 endperiod=str("")
>                 skipperiod=str("")
>
>
>         for (path, dirs, files) in os.walk(MainFolder):
>                         for dir in dirs:
>                                 print dir
>                         path=path+'/'
>
>                         for ncfile in files:
>                                 if ncfile[-3:]=='.nc':
>                                     print "dealing with ncfiles:", 
> path+ncfile
>                                     ncfile=os.path.join(path,ncfile)
>                                     ncfile=Dataset(ncfile, 'r+', 
> 'NETCDF4')
>                                     
> variable=ncfile.variables[ncvariablename][:]
>                                     TIME=ncfile.variables['time'][:]
>                                     
> fillvalue=ncfile.variables[ncvariablename]._FillValue
>                                     ncfile.close()
>
>                                     for variable, TIME in 
> zip((variable[startperiod:endperiod:skipperiod]),(TIME[startperiod:endperiod:skipperiod])):
>                                     #for variable, TIME in 
> zip((variable[sliceperiod]),(TIME[sliceperiod])):
>
>                                             cdftime=utime('seconds 
> since 1970-01-01 00:00:00')
>                                             
> ncfiletime=cdftime.num2date(TIME)
>                                             print ncfiletime
>                                             timestr=str(ncfiletime)
>                                             d = 
> datetime.strptime(timestr, '%Y-%m-%d %H:%M:%S')
>                                             date_string = 
> d.strftime('%Y%m%d_%H%M')
>                                             #Set up basemap using 
> mercator projection 
> http://matplotlib.sourceforge.net/basemap/doc/html/users/merc.html
>                                             map = 
> Basemap(projection='merc',llcrnrlat=-40,urcrnrlat=-33,
>                                                               
> llcrnrlon=139.0,urcrnrlon=151.0,lat_ts=0,resolution='i')
>                                             x,y=map(*N.meshgrid(LON,LAT))
>                                             
> map.drawcoastlines(linewidth=0.5)
>                                             
> #map.readshapefile(shapefile1, 'DSE_REGIONS')
>                                             map.drawstates()
>
>                                             plt.title(Title+' %s 
> UTC'%ncfiletime)
>
>                                             CS = 
> map.contourf(x,y,variable, ticks, cmap=plt.cm.jet)
>                                             l,b,w,h =0.1,0.1,0.8,0.8
>                                             cax = plt.axes([l+w+0.025, 
> b, 0.025, h], )
>                                             cbar=plt.colorbar(CS, 
> cax=cax, drawedges=True)
>
>                                             #save map as *.png and 
> plot netcdf file
>                                             
> plt.savefig((os.path.join(OutputFolder, 
> ncvariablename+date_string+'UTC.png')))
>                                             plt.show()
>                                             plt.close() # must use 
> plt.close() so that colorbar works!
>
>
>
>
>
>
>
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor


-- 
Bob Gailer
919-636-4239
Chapel Hill NC

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110928/87de9954/attachment-0001.html>


More information about the Tutor mailing list