def read_stim_attrs(attr_dir): stim_dir = get_stim_dir(attr_dir) attr_names = [d for d in listdir(stim_dir) if os.path.isdir(os.path.join(stim_dir,d))] attr_names.remove('.svn') attr_dicts = {} for an in attr_names: attr_dir = os.path.join(stim_dir, an) attr_files = listdir(attr_dir) attr_files.remove('.svn') # Attribute file name should be of <exp_name>_<attr_name>_stim.txt for af in attr_files: parts = af.split('_') exp_name = parts[0] attr_name = parts[1] if attr_name != an or parts[2] != 'stim.txt': raise ValueError('Invalid stimulus attribute file: %s' % os.path.join(attr_dir, af)) if exp_name not in attr_dicts: attr_dicts[exp_name] = {} attr_dicts[exp_name][attr_name] = readers.read_white_space_sep_file(os.path.join(attr_dir, af)) attr_arrs = {} for (exp_name, attr_vals) in attr_dicts.iteritems(): attr_arrs[exp_name] = iter(dict_to_list(attr_vals)) return attr_arrs
def read_context_attrs(attr_dir): context_dir = os.path.join(attr_dir, 'context') get_context_attr_dir = lambda attr : os.path.join(attr_dir, attr) attr_names = [d for d in listdir(context_dir) if os.path.isdir(os.path.join(context_dir,d))] attr_names.remove('.svn') attr_dicts = {} for an in attr_names: attr_dir = os.path.join(context_dir, an) attr_files = listdir(attr_dir) attr_files.remove('.svn') for af in attr_files: parts = af.split('_') exp_name = parts[0] attr_name = parts[1] context_level = parts[2].replace('.txt', '') if attr_name != an: raise ValueError('Invalid stimulus attribute file: %s' % os.path.join(attr_dir, af)) if exp_name not in attr_dicts: attr_dicts[exp_name] = {} if context_level not in attr_dicts[exp_name]: attr_dicts[exp_name][context_level] = {} tokens = readers.read_white_space_sep_file(os.path.join(attr_dir, af)) tok_convert = lambda t : t if t != '~' else None attr_dicts[exp_name][context_level][attr_name] = [tok_convert(t) for t in tokens] attr_arrs = {} for (exp_name, context_attrs) in attr_dicts.iteritems(): if exp_name not in attr_arrs: attr_arrs[exp_name] = {} for context_level in context_attrs.keys(): if context_level not in attr_arrs[exp_name]: attr_arrs[exp_name][context_level] = {} attr_arrs[exp_name][context_level] = iter(dict_to_list(attr_dicts[exp_name][context_level])) return attr_arrs