使用Python将ASCII文件转换为netCDF(从ASCII文件中选择列)

2024-07-05 14:12:05 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我是新来的论坛,请原谅我在这里所做的任何错误。如果你能指出我的错误,我会很高兴的,我会确保我不会重复它们当我张贴任何其他东西。在

任务:使用Python将ASCII数据文件(ucac4星型目录)转换为netCDF格式。只输出一些固定数量的列从ASCII文件到netCDF文件。在

问题: 回溯(最近一次呼叫): 文件“D:\Work 1\FINAL\New Try\txt2nc.py公司“,第51行,英寸 vic_径流[ra,spd,:,:]=输出; 文件“netCDF4.pyx”,第2821行,在netCDF4.Variable中。setitem (netCDF4.c:35204) 文件“C:\Python27\lib\site packages\netCDF4_实用工具.py“,第187行 _开始计算步幅 ee=范围(开始、停止、步进) 文件“C:\Python27\lib\site packages\numpy\ma\核心.py“,第4102行,英寸 int raise MaskError('无法将掩码元素转换为Python int') maskeror:无法将掩码元素转换为Python int.*

提前谢谢。感谢任何帮助!在

    from __future__ import division
    from netCDF4 import dataset
    import numpy as np
    import os

    PATH = 'D:\\Internship Work 1\\Alok Data\\ASCII'
    LL = np.loadtxt('%s\\4uc001.txt' %PATH, delimiter='|', usecols = 
     (0,1,2,3), skiprows=0);
    LL = LL[:,:]

    # NC file setup
    root_grp = Dataset('%s\\4uc001.nc' %PATH, 'w', format='NETCDF4')
    root_grp.description = 'Star Catalog UCAC Data'

    # dimensions
    ra = root_grp.createDimension('ra', 32)
    spd = root_grp.createDimension('spd', 80)
    magm = root_grp.createDimension('magm', 96)
    maga = root_grp.createDimension('maga', 120)


    # variables
    ra = root_grp.createVariable('ra', np.byte, ('ra',))
    spd = root_grp.createVariable('spd', np.byte, ('spd',))
    magm = root_grp.createVariable('magm', np.byte, ('magm'),)
    maga = root_grp.createVariable('maga', np.byte, ('maga'),)
    vic_runoff = root_grp.createVariable('vic_runoff', np.byte, ('ra',
     'spd', 'magm', 'maga',))

    ra.units = 'mas'
    spd.units = 'mas'
    magm.units = 'millimag'
    maga.units = 'millimag'

    for ra in enumerate(ra):
      tempstore = np.zeros((206,4),int)


    output_filename = 'D:\\Internship Work 1\\Alok Data\\ASCII\\4uc001.txt'

    output = np.loadtxt(output_filename,delimiter='|',usecols = (0,1,2,3))

    tempstore[:,:] = output # ensembles x months
    vic_runoff[ra,spd,:,:] = tempstore[:,:] # write all ensembles to netcdf

    print('work done')

Tags: 文件importnpasciirootbyteintra
1条回答
网友
1楼 · 发布于 2024-07-05 14:12:05

以下几点建议有望对您有所帮助:

vic_runoff[ra,spd,:,:]中,spd是一个netCDF4变量。它不能用作索引器。尝试vic_runoff[ra,0,:,:] = tempstore[:,:]看看这是否解决了您的问题。在

另外,您应该考虑使用pandas.read_csvread_table来读取ASCII文件。这里有一篇关于numpy.loadtxt性能改进的文章

最后,如果您使用pandas路径,您可以考虑使用xarray来写入netCDF。xarray可以很容易地将pandas转换成xarray.Dataset,然后整个netCDF文件都是用一个快速的Dataset.to_netcdf()调用编写的。在

相关问题 更多 >