msrh-zindi-magic / scripts /jsonl_rowidx_to_csv.py
MagicCard's picture
Docs
028081c
Raw
History Blame Contribute Delete
1.79 kB
"""Build Zindi submission CSV from JSONL using ROW ORDER (not ID) match.
Test.csv row N <-> JSONL row N. Use SampleSubmission for column header + non-test rows."""
import csv, json, argparse, pathlib
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--jsonl", required=True)
ap.add_argument("--test_csv", default="/mnt/msrh/Magic_submission/data/Test.csv")
ap.add_argument("--sample", default="/mnt/msrh/Magic_submission/data/SampleSubmission.csv")
ap.add_argument("--out_csv", required=True)
args = ap.parse_args()
preds = [json.loads(l).get("predict","") for l in open(args.jsonl)]
with open(args.test_csv, newline="") as f:
test_ids = [r["ID"] for r in csv.DictReader(f)]
assert len(preds) == len(test_ids), f"len(preds)={len(preds)} != len(test_ids)={len(test_ids)}"
id2pred = dict(zip(test_ids, preds))
with open(args.sample, newline="") as f:
sample_cols = next(csv.reader(f))
target_cols = [c for c in sample_cols if c.startswith("Target")]
with open(args.sample, newline="") as f:
sample_rows = list(csv.DictReader(f))
pathlib.Path(args.out_csv).parent.mkdir(parents=True, exist_ok=True)
n_fill = 0
with open(args.out_csv, "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=sample_cols)
w.writeheader()
for r in sample_rows:
id_ = r["ID"]
text = id2pred.get(id_)
row = {"ID": id_}
if text is not None:
for tc in target_cols: row[tc] = text
n_fill += 1
else:
for c in sample_cols[1:]: row[c] = r.get(c, "")
w.writerow(row)
print(f"wrote {args.out_csv} filled={n_fill}/{len(sample_rows)}")
if __name__ == "__main__":
main()