def test_read_columns(self): """Test basic column reading.""" fn = self.filenames[0] # Get the first two columns. Both columns are of type int. col0, col1 = du.read_columns(fn, self.header_lines[fn], (int, int)) self.assertEqual(col0, self.columns[fn][0]) self.assertEqual(col1, self.columns[fn][1]) # Read columns 1 and 3 and convert them to type # int and float, respectively. Skip the two header rows. col1, col3 = du.read_columns(fn, self.header_lines[fn], (int, float), (1,3)) self.assertEqual(col1, self.columns[fn][1]) self.assertEqual(col3, self.columns[fn][3]) # Read only the second column. Note the use of tuples! col1, = du.read_columns(fn, self.header_lines[fn], (int,), (1,)) self.assertEqual(col1, self.columns[fn][1]) # A missing column should raise IndexError. fn = self.filenames[1] self.assertRaises(IndexError, du.read_columns, fn, self.header_lines[fn], (int,float), (1,3)) # Finding a float when int is expected should raise # ValueError. fn = self.filenames[2] self.assertRaises(ValueError, du.read_columns, fn, self.header_lines[fn], (int,int), (0,1))
def test_read_columns_fun(self): """Test column reading with conversion function.""" fn = self.filenames[0] # Get the first two columns. Both columns are of type int. def col_fun(fields): return int(fields[0]), int(fields[1]) col0, col1 = du.read_columns(fn, self.header_lines[fn], col_fun) self.assertEqual(col0, self.columns[fn][0]) self.assertEqual(col1, self.columns[fn][1]) # Read columns 1 and 3 and convert them to type # int and float, respectively. Skip the two header rows. def col_fun(fields): return int(fields[1]), float(fields[3]) col1, col3 = du.read_columns(fn, self.header_lines[fn], col_fun) self.assertEqual(col1, self.columns[fn][1]) self.assertEqual(col3, self.columns[fn][3]) # Read only the second column. Note the use of tuples! def col_fun(fields): return int(fields[1]), col1, = du.read_columns(fn, self.header_lines[fn], col_fun) self.assertEqual(col1, self.columns[fn][1])