From 443f5734d37a09c776960f874e1b29f27cc0452f Mon Sep 17 00:00:00 2001 From: rtmalikian Date: Wed, 1 Jul 2026 12:14:04 -0700 Subject: [PATCH] fix: use context manager for file operations in cardiology_detect.py Replace 5 bare open().readlines() calls with 'with open() as f' context managers to ensure proper file handle cleanup. The previous pattern relied on CPython reference counting for cleanup, which is not guaranteed across all Python implementations. Signed-off-by: rtmalikian --- pyhealth/tasks/cardiology_detect.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pyhealth/tasks/cardiology_detect.py b/pyhealth/tasks/cardiology_detect.py index 689956ec3..b91b125af 100644 --- a/pyhealth/tasks/cardiology_detect.py +++ b/pyhealth/tasks/cardiology_detect.py @@ -73,7 +73,8 @@ def cardiology_isAR_fn(record, epoch_sec=10, shift=5): # X load X = loadmat(os.path.join(root, signal))["val"] - label_content = open(os.path.join(root, label), "r").readlines() + with open(os.path.join(root, label), "r") as f: + label_content = f.readlines() Dx, Sex, Age = label_content[-4].split(" ")[-1][:-1].split(","), \ label_content[-5].split(" ")[-1][:-1].split(","), \ label_content[-6].split(" ")[-1][:-1].split(",") @@ -169,7 +170,8 @@ def cardiology_isBBBFB_fn(record, epoch_sec=10, shift=5): # X load X = loadmat(os.path.join(root, signal))["val"] - label_content = open(os.path.join(root, label), "r").readlines() + with open(os.path.join(root, label), "r") as f: + label_content = f.readlines() Dx, Sex, Age = label_content[-4].split(" ")[-1][:-1].split(","), label_content[-5].split(" ")[-1][:-1].split(","), label_content[-6].split(" ")[-1][:-1].split(",") y = 1 if set(Dx).intersection(BBBFB_space) else 0 @@ -263,7 +265,8 @@ def cardiology_isAD_fn(record, epoch_sec=10, shift=5): # X load X = loadmat(os.path.join(root, signal))["val"] - label_content = open(os.path.join(root, label), "r").readlines() + with open(os.path.join(root, label), "r") as f: + label_content = f.readlines() Dx, Sex, Age = label_content[-4].split(" ")[-1][:-1].split(","), label_content[-5].split(" ")[-1][:-1].split(","), label_content[-6].split(" ")[-1][:-1].split(",") y = 1 if set(Dx).intersection(AD_space) else 0 @@ -357,7 +360,8 @@ def cardiology_isCD_fn(record, epoch_sec=10, shift=5): # X load X = loadmat(os.path.join(root, signal))["val"] - label_content = open(os.path.join(root, label), "r").readlines() + with open(os.path.join(root, label), "r") as f: + label_content = f.readlines() Dx, Sex, Age = label_content[-4].split(" ")[-1][:-1].split(","), label_content[-5].split(" ")[-1][:-1].split(","), label_content[-6].split(" ")[-1][:-1].split(",") y = 1 if set(Dx).intersection(CD_space) else 0 @@ -451,7 +455,8 @@ def cardiology_isWA_fn(record, epoch_sec=10, shift=5): # X load X = loadmat(os.path.join(root, signal))["val"] - label_content = open(os.path.join(root, label), "r").readlines() + with open(os.path.join(root, label), "r") as f: + label_content = f.readlines() Dx, Sex, Age = label_content[-4].split(" ")[-1][:-1].split(","), label_content[-5].split(" ")[-1][:-1].split(","), label_content[-6].split(" ")[-1][:-1].split(",")