print(string.strip(si['name']))
            print("# Station geo location")
            print("%g, %g" % (si['lat'], si['lon']))
            print("# Elevation (meters)")
            print("%g" % si['elevation'])
            print("# Station sensors")
            print(string.join(nnv, ", "))
        else:
          print(",".join([si['code'], string.strip(si['name'].replace(',', ' ')), str(si['lat']), str(si['lon']), str(si['elevation']), ":".join(nnv)]))

    elif args.command == 'dl':
        si = { 'code' : args.station_code }
        get_station_info(si)
        doc = download_station_data(si, args.fmt, args.tstamp, args.hours, args.vlist)

        if args.info_fmt == 'loose':
            with open('%s_%s.%s' % (args.station_code, args.tstamp.strftime(tstamp_fmt), args.fmt), 'w') as f:
                f.write(doc)
        else:
            # read in standard observation variances
            with open(args.obs_var_table, "r") as f:
                obs_var_tbl = dict(map(lambda x: x.split(","), map(string.strip, f.readlines())))
                for k,v in obs_var_tbl.iteritems():
                    obs_var_tbl[k] = float(v)

            obs = decode_obs_xls(doc)
            write_plain_format(si['code'],obs,obs_var_tbl)
    else:
        sys.exit(1)

        obs_var_tbl = dict(map(lambda x: x.split(","), map(string.strip, f.readlines())))
        for k,v in obs_var_tbl.iteritems():
            obs_var_tbl[k] = float(v)

    # for each station find all xls files
    for sid in sids:
        print("Processing station %s" % sid)
        fnames = glob.glob("%s*.xls" % sid)

        stored_obs = {}

        # read in each file and parse the contents
        obs = {}
        for fname in fnames:
            with open(fname, 'r') as f:
                obs_i = decode_obs_xls(f.read())
                obs.update(obs_i)

        # write out the data in a neat csv file
        with open("%s.obs" % sid, "w") as f:
            f.write("# Data file generated on %s by extract_observations.py\n" % str(datetime.now()))
            f.write("# Format is time, observed_vars, observations, variances\n")
            for tm in sorted(obs.keys()):
                # sometimes stations need not supply a single measurement at a given time, then zip() fails
                if len(obs[tm]) > 0:
                    # remove unavailable measurments
                    var_list, obs_list = zip(*obs[tm])
                    obs_var = [ obs_var_tbl[x] if x in obs_var_tbl else float("nan") for x in var_list ]
                    f.write(tm.strftime('%Y-%m-%d_%H:%M %Z'))
                    f.write('\n')
                    f.write(string.join(map(str, var_list), ", "))