You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python高效读取VMF1格网文件(如VMFG_20221231.H00)

Python高效读取VMF1格网文件的实用方法

先理清VMF1格网文件的结构:

文件中以!开头的行是注释元数据,后续每行是空格分隔的数值,对应字段依次为:纬度(lat)、经度(lon)、湿延迟系数(ah)、干延迟系数(aw)、天顶干延迟(zhd)、天顶湿延迟(zwd)

下面分享几个高效的读取方法:

1. 用Pandas一键读取(最省心)

Pandas的read_csv可以直接适配这类空格分隔的文本,自动跳过注释行,还能直接生成DataFrame,方便后续的数据筛选、分析操作,处理大文件速度也很可观。

import pandas as pd

# 读取文件,跳过!开头的注释行,指定字段名
df = pd.read_csv(
    "VMFG_20221231.H00",
    comment='!',
    delim_whitespace=True,
    names=['lat', 'lon', 'ah', 'aw', 'zhd', 'zwd']
)

# 查看前5行数据验证
print(df.head())

2. 用Numpy加载数值数组(内存更高效)

如果只需要原始数值数组,不需要DataFrame的额外功能,Numpy的loadtxt是更好的选择——内存占用更低,读取速度更快,适合处理超大型VMF文件。

import numpy as np

# 读取数据,跳过注释行,指定数据类型为float64
data_array = np.loadtxt(
    "VMFG_20221231.H00",
    comments='!',
    dtype=np.float64
)

# 拆分各个字段
latitudes = data_array[:, 0]
longitudes = data_array[:, 1]
ah_values = data_array[:, 2]
aw_values = data_array[:, 3]
zhd_values = data_array[:, 4]
zwd_values = data_array[:, 5]

# 打印前3组数据验证
print(f"前3组纬度数据:{latitudes[:3]}")
print(f"前3组经度数据:{longitudes[:3]}")

3. 纯Python生成器逐行读取(极致灵活)

要是你需要逐行处理数据,或者文件大到没法一次性加载到内存,用纯Python配合生成器的方式最合适——不会一次性加载所有数据,内存压力极小,还能自定义每一行的处理逻辑。

def read_vmf1_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            # 跳过注释行
            if line.startswith('!'):
                continue
            # 清理行内容并分割成数值
            line_data = line.strip()
            if not line_data:
                continue
            values = list(map(float, line_data.split()))
            if len(values) == 6:
                yield values

# 使用生成器读取数据
vmf_generator = read_vmf1_file("VMFG_20221231.H00")

# 遍历查看前5条数据
for idx, row in enumerate(vmf_generator):
    if idx >= 5:
        break
    print(f"第{idx+1}行数据:{row}")

内容的提问来源于stack exchange,提问作者Shanker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:11:05