爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6555|回复: 1

运行WPS时数据太多怎么办?

[复制链接]

新浪微博达人勋

发表于 2021-11-17 15:25:34 | 显示全部楼层 |阅读模式

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

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

x
本文首发于微信公众号【气象备忘录】,转载请标明出处

当我们运行WPS,处理大批量的数据文件的时候(比如,数年的fnl数据),在运行
  1. ./link_grib.csh fnl_*grib2
复制代码
时,有时我们会遇到这样的错误:
  1. foreach: Too many arguments.
复制代码
这是由于csh在大多数linux发行版上的默认实现tcsh的语法中,foreach 函数无法接受过多的参数。一旦参数超过一定数量,就会报foreach: Too many arguments.这种错误。那我们应该如何解决呢?有下列几种方法供大家选择
  • 减少单次运行WPS时处理文件的数量。少量多次即可避免这一问题。
  • 如果我们深入研究一下link_grib.csh这个脚本,那我们可以发现,它做的只不过是将文件软链接到当前目录,然后重命名为GRIBFILE.????格式而已。既然csh的循环有数量限制,那我们将其改写为python不就行了嘛。
下面就是我将csh脚本一比一改写而成的python脚本。只要将原本的./link_grib.csh fnl_*grib2改写成./link_grib.py fnl_*grib2就可以了!最多支持26^4=456976个文件,按照fnl每天4个文件来算的话,相当于300多年。相信够大家用的了。
  1. #! /usr/bin/python
  2. import sys, glob, os


  3. def link_grib_file(filelist):
  4.     n = 0
  5.     for ifile in filelist:
  6.         if ifile != ".":
  7.             file_suffix = file_alphabet(n)
  8.             os.symlink(ifile, "GRIBFILE." + file_suffix)
  9.             n += 1
  10.             
  11. def file_alphabet(number):
  12.     alpha=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
  13.     if number >= 26 * 26 * 26:
  14.         print("RAN OUT OF GRIB FILE SUFFIXES!")
  15.         exit()
  16.     else:
  17.         i1 = number % 26
  18.         i2 = (number - i1) // 26 % 26
  19.         i3 = (number - i2 * 26 - i1) // 26 // 26 % 26
  20.         return alpha[i3] + alpha[i2] + alpha[i1]

  21. if __name__ == "__main__":
  22.     varlist = sys.argv[1:]
  23.     if (len(varlist) == 1) or (len(varlist) == 2 and varlist[1] == "."):
  24.         os.system("rm -f GRIBFILE.???")
  25.         filelist = glob.glob(varlist[0])
  26.         link_grib_file(filelist)
  27.     elif len(varlist) > 1:
  28.         os.system("rm -f GRIBFILE.???")
  29.         filelist = varlist
  30.         link_grib_file(filelist)
  31.     elif len(varlist) == 0:
  32.         print(" ")
  33.         print(" ")
  34.         print("   Please provide some GRIB data to link")
  35.         print("   usage: ./link_grib.py path_to_grib_data/grib_data_root")
  36.         print(" ")
  37.         print(" ")
复制代码
微信图片_20211114113553.jpg


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

新浪微博达人勋

发表于 2021-11-17 16:46:00 | 显示全部楼层
原来支持多少个文件
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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