def _write_tsv(fname, dictionary, overwrite=False, verbose=False): """Write an ordered dictionary to a .tsv file.""" if op.exists(fname) and not overwrite: raise FileExistsError(f'"{fname}" already exists. ' 'Please set overwrite to True.') _to_tsv(dictionary, fname) if verbose: print(os.linesep + f"Writing '{fname}'..." + os.linesep) print(_tsv_to_str(dictionary))
def _write_tsv(fname, dictionary, overwrite=False, verbose=False): """Write an ordered dictionary to a .tsv file.""" if op.exists(fname) and not overwrite: raise FileExistsError('"%s" already exists. Please set ' # noqa: F821 'overwrite to True.' % fname) _to_tsv(dictionary, fname) if verbose: print(os.linesep + "Writing '%s'..." % fname + os.linesep) print(_tsv_to_str(dictionary))
def test_tsv_handler(tmp_path): """Test the TSV handling.""" # create some dummy data d = odict(a=[1, 2, 3, 4], b=['five', 'six', 'seven', 'eight']) assert _contains_row(d, {'a': 1, 'b': 'five'}) d2 = odict(a=[5], b=['nine']) d = _combine_rows(d, d2) assert 5 in d['a'] d2 = odict(a=[5]) d = _combine_rows(d, d2) assert 'n/a' in d['b'] d2 = odict(a=[5], b=['ten']) d = _combine_rows(d, d2, drop_column='a') # make sure that the repeated data was dropped assert 'nine' not in d['b'] print(_tsv_to_str(d)) d_path = tmp_path / 'output.tsv' # write the data to an output tsv file _to_tsv(d, d_path) # now read it back d = _from_tsv(d_path) # test reading the file in with the incorrect number of datatypes raises # an Error with pytest.raises(ValueError): d = _from_tsv(d_path, dtypes=[str]) # we can also pass just a single data type and it will be applied to all # columns d = _from_tsv(d_path, str) # remove any rows with 2 or 5 in them d = _drop(d, [2, 5], 'a') assert 2 not in d['a'] # test combining data with differing numbers of columns d = odict(a=[1, 2], b=['three', 'four']) d2 = odict(a=[4], b=['five'], c=[3.1415]) # raise error if a new column is tried to be added with pytest.raises(KeyError): d = _combine_rows(d, d2) d2 = odict(a=[5]) d = _combine_rows(d, d2) assert d['b'] == ['three', 'four', 'n/a'] assert _contains_row(d, {'a': 5}) # test reading a single column _to_tsv(odict(a=[1, 2, 3, 4]), d_path) d = _from_tsv(d_path) assert d['a'] == ['1', '2', '3', '4']