爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5003|回复: 1

批量读取多个以时间命名文件夹里的csv文件,请教是否有更好的办法?

[复制链接]

新浪微博达人勋

发表于 2016-6-20 16:27:51 | 显示全部楼层 |阅读模式
NCL
系统平台:
问题截图: -
问题概况: 批量读取多个以时间命名文件夹里的csv文件数据,请教是否有更好的办法?自己用systemfun读出错。
我看过提问的智慧: 看过
自己思考时长(天): 1

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
先把我的数据摆出来



........
.........
........
这是我要读的29个以时间命名的文件,但是时间不连续
I QQ图片20160620162219.png
每个以时间命名的文件夹里放着这样的十几个csv文件,不同时间文件夹下csv数据的命名相同,比如下面就是20160501和20160502的数据,命名都一模一样
QQ图片20160620162526.png QQ图片20160620162542.png

我想将每一天的caotan.csv的前24个数值做平均,但是不知道怎么批量读取这29天文件里的caotan.csv数据,自己试着编了小程序,提示有错

fatal:List subscripting used on non-list variable, can't continue
fatal:["Execute.c":8567]:Execute: Error occurred at or near line 37 in file csv_read.ncl

请各位大神指教,实在不知道该怎么办了?




我的脚本:
   ;
begin

filename1=systemfunc("ls /public/home/huanglei/cmaqdata/2016*/Caotan.csv")

time_al= new((/29,24/),float,"No_FillValue")
     oth_al = new((/29,24/),float,"No_FillValue")
     xa_al  = new((/29,24/),float,"No_FillValue")
     tc_al  = new((/29,24/),float,"No_FillValue")
     bj_al  = new((/29,24/),float,"No_FillValue")
     xy_al  = new((/29,24/),float,"No_FillValue")
     wn_al  = new((/29,24/),float,"No_FillValue")
     ya_al  = new((/29,24/),float,"No_FillValue")
hz_al  = new((/29,24/),float,"No_FillValue")
     yl_al  = new((/29,24/),float,"No_FillValue")
     ak_al  = new((/29,24/),float,"No_FillValue")
sl_al  = new((/29,24/),float,"No_FillValue")
     do i=0,28

          ;---Read in file as array of strings so we can parse each line.
       lines  = asciiread(filename1,-1,"string")
       nlines = dimsizes(lines)-1   ; First line is a header

    ;
    ; Start reading in the fields we care about:
    ; The first line is a header, so skip this.
    ;
      delim     = ","
      time = str_get_field(lines(1:25),1,delim)  
      oth  = str_get_field(lines(1:25),2,delim)  
      xa   = str_get_field(lines(1:25),3,delim)  
      tc   = str_get_field(lines(1:25),4,delim)  
  bj   = str_get_field(lines(1:25),5,delim)  
      xy   = str_get_field(lines(1:25),6,delim)  
      wn   = str_get_field(lines(1:25),7,delim)  
      ya   = str_get_field(lines(1:25),8,delim)
  hz   = str_get_field(lines(1:25),9,delim)  
      yl   = str_get_field(lines(1:25),10,delim)  
      ak   = str_get_field(lines(1:25),11,delim)  
      sl   = str_get_field(lines(1:25),12,delim)

            
             time_al(i,:)= time   
oth_al(i,:) = oth  
xa_al(i,:)  = xa  
tc_al(i,:)  = tc  
bj_al(i,:)  = bj  
xy_al(i,:)  = xy  
wn_al(i,:)  = wn  
ya_al(i,:)  = ya  
             hz_al(i,:)  = tc  
yl_al(i,:)  = bj  
ak_al(i,:)  = xy  
sl_al(i,:)  = wn

end do

              time_all=ndtooned(time_al)
  oth_all=ndtooned(oth_al)
  xa_all=ndtooned(xa_al)
  tc_all=ndtooned(tc_al)
  bj_all=ndtooned(bj_al)
  xy_all=ndtooned(xy_al)
  wn_all=ndtooned(wn_al)
              ya_all=ndtooned(xy_al)
  hz_all=ndtooned(wn_al)
  yl_all=ndtooned(ya_al)  
  ak_all=ndtooned(ak_al)
  sl_all=ndtooned(sl_al)


     print(time_all)

  ; calculate the avg

              oth_avg=avg(oth_al)
  xa_avg=avg(xa_all)
  tc_avg=avg(tc_all)
  bj_avg=avg(bj_all)
  xy_avg=avg(xy_all)
  wn_avg=avg(wn_all)
              ya_avg=avg(xy_all)
  hz_avg=avg(wn_all)
  ya_avg=avg(ya_all)  
  ak_avg=avg(ak_all)
  sl_avg=avg(sl_all)

  ssx = hz_avg + ak_avg + sl_avg
  nsx = ya_avg + ya_avg


end


密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-22 15:03:40 | 显示全部楼层
有一个小建议,就是用ncl里面的系统函数:system 或者systemfunc,用shell脚本语言把指定文件夹里面的文件名列举出来,存到一个数组里,然后再一个一个读取
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表