diff --git a/niworkflows/interfaces/tests/test_utility.py b/niworkflows/interfaces/tests/test_utility.py index a2ae8ad36b9..0b18b55b2c2 100644 --- a/niworkflows/interfaces/tests/test_utility.py +++ b/niworkflows/interfaces/tests/test_utility.py @@ -21,8 +21,9 @@ # https://www.nipreps.org/community/licensing/ # """KeySelect tests.""" +from pathlib import Path import pytest -from ..utility import KeySelect +from ..utility import KeySelect, _tsv2json def test_KeySelect(): @@ -32,3 +33,11 @@ def test_KeySelect(): with pytest.raises(ValueError): KeySelect(fields=[]) + + +def test_tsv2json(tmp_path): + Path.write_bytes(tmp_path / 'empty.tsv', bytes()) + res = _tsv2json(tmp_path / 'empty.tsv', None, 'any_column') + assert res == {} + res = _tsv2json(tmp_path / 'empty.tsv', None, 'any_column', additional_metadata={'a': 'b'}) + assert res == {} diff --git a/niworkflows/interfaces/utility.py b/niworkflows/interfaces/utility.py index 59e055743af..345b78d90ea 100644 --- a/niworkflows/interfaces/utility.py +++ b/niworkflows/interfaces/utility.py @@ -545,12 +545,16 @@ def less_breakable(a_string): drop_columns = drop_columns or [] additional_metadata = additional_metadata or {} - tsv_data = pd.read_csv(in_tsv, "\t") + try: + tsv_data = pd.read_csv(in_tsv, "\t") + except pd.errors.EmptyDataError: + tsv_data = pd.DataFrame() for k, v in additional_metadata.items(): tsv_data[k] = [v] * len(tsv_data.index) for col in drop_columns: tsv_data.drop(labels=col, axis="columns", inplace=True) - tsv_data.set_index(index_column, drop=True, inplace=True) + if index_column in tsv_data: + tsv_data.set_index(index_column, drop=True, inplace=True) if enforce_case: tsv_data.index = [ re.sub(re_to_snake, snake, less_breakable(i), 0).lower()