Source code for pycif.plugins.obsparsers.obspack.parse_txt
import pandas as pd
[docs]
def parse_txt(obs_file):
# Get header information
with open(obs_file, "r") as f:
nheader = int(f.readline().split(":")[1])
header = []
for k in range(nheader - 1):
header.append(f.readline())
# Fetch information in the header
for ln in header:
if "site_code" in ln:
site_code = ln.split(":")[1].strip()
elif "site_elevation_unit" in ln:
site_elevation_unit = ln.split(":")[1].strip()
elif "dataset_parameter" in ln:
dataset_parameter = ln.split(":")[1].strip()
# Read data
col2use = [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 18, 20]
colname = [
"year", "month", "day", "hour", "minute", "second",
"duration", "obs", "lat", "lon", "alt",
"flag", "obspack_id"
]
data = pd.read_csv(
obs_file, skiprows=nheader, header=None,
sep=r"\s+",
usecols=col2use, names=colname,
index_col="obspack_id",
parse_dates={
"date": ["year", "month", "day", "hour", "minute", "second"]
}
)
data.loc[:, "date"] = pd.to_datetime(
data["date"], format="%Y %m %d %H %M %S"
)
# Replace fixed parameters
data.loc[:, "station"] = site_code
data.loc[:, "parameter"] = dataset_parameter.upper()
data.loc[:, "network"] = "ObsPack"
data.loc[:, "obserror"] = 0.
return data