This is a python package to parse raw METAR and TAF report text.
- Clone this repository and run
$ python setup.py installin your terminal. - Use Pip
$ pip install pymetaf
>>> from pymetaf import parse_text
>>> text = 'METAR ZYAS 250500Z 21009G14MPS 6000 NSC 18/08 Q1018 NOSIG'
>>> parse_text(text, 2021, 5)
{'kind': 'METAR',
'icao': 'ZYAS',
'datetime': '2021-05-25T05:00:00+00:00',
'wind_direction': 210,
'wind_direction_units': 'degree',
'wind_speed': 9,
'wind_speed_units': 'm/s',
'gust': 14,
'wind_direction_range': None,
'cavok': False,
'visibility': 6000,
'visibility_units': 'm',
'temperature': 18,
'dew_temperature': 8,
'temperature_units': 'degree C',
'qnh': 1018,
'qnh_units': 'hPa',
'cloud': [{'cloud_mask': 0,
'cloud_height': None,
'cloud_height_units': 'm',
'cloud_type': None}],
'weather': ['Clear Sky'],
'auto': False}🎉 100% Detection Rate - Validated on 120,727 real-world anomalous METAR reports!
>>> from pymetaf import validate_metar
>>> # Valid METAR
>>> metar = "METAR ZBAA 311400Z 01002MPS CAVOK 14/12 Q1009 NOSIG="
>>> is_valid, error_msg = validate_metar(metar)
>>> print(is_valid)
True
>>> # Invalid METAR (wrong QNH format)
>>> metar = "METAR ZBTJ 290200Z 35009MPS CAVOK M04/M27 Q102NOSIG="
>>> is_valid, error_msg = validate_metar(metar)
>>> print(is_valid)
False
>>> print(error_msg)
Invalid QNH format: Q102NOSIG
>>> # Strict mode (no RMK allowed)
>>> metar_with_rmk = "METAR RCMQ 230900Z 25008KT 9999 FEW010 Q1009 NOSIG RMK A2982="
>>> is_valid, error_msg = validate_metar(metar_with_rmk, strict_mode=True)
>>> print(is_valid)
False
>>> print(error_msg)
RMK remarks section not allowed in strict modeThe validator can detect 30+ types of format errors including:
- Missing/invalid report type, ICAO code, time group
- Wind group errors (format, spacing, units)
- QNH format errors
- Invalid characters and line breaks
- Spelling errors (EMPO, ECMG, NOSI, OSIG, etc.)
- RMK section anomalies
- And many more...
Enjoy it!