Appendix 6: @files_re: Deprecated syntax using regular expressions¶
Warning
This is deprecated syntax
which is no longer supported and
should NOT be used in new code.
See also
- Manual Table of Contents
- decorators
- @files_re syntax in detail
Overview¶
@files_re combines the functionality of @transform, @collate and @merge in one overloaded decorator.
This is the reason why its use is discouraged. @files_re syntax is far too overloaded and context-dependent to support its myriad of different functions.
The following documentation is provided to help maintain historical Ruffus usage.
Transforming input and output filenames¶
For example, the following code takes files from the previous pipeline task, and makes new output parameters with the .sums suffix in place of the .chunks suffix:
@transform(step_4_split_numbers_into_chunks, suffix(".chunks"), ".sums") def step_5_calculate_sum_of_squares (input_file_name, output_file_name): # # calculate sums and sums of squares for all values in the input_file_name # writing to output_file_name ""This can be written using @files_re equivalently:
@files_re(step_4_split_numbers_into_chunks, r".chunks", r".sums") def step_5_calculate_sum_of_squares (input_file_name, output_file_name): ""
Collating many inputs into a single output¶
Similarly, the following code collects inputs from the same species in the same directory:
@collate('*.animals', # inputs = all *.animal files regex(r'mammals.([^.]+)'), # regular expression r'\1/animals.in_my_zoo', # single output file per species r'\1' ) # species name def capture_mammals(infiles, outfile, species): # summarise all animals of this species ""This can be written using @files_re equivalently using the combine indicator:
@files_re('*.animals', # inputs = all *.animal files r'mammals.([^.]+)', # regular expression combine(r'\1/animals.in_my_zoo'), # single output file per species r'\1' ) # species name def capture_mammals(infiles, outfile, species): # summarise all animals of this species ""
Generating input and output parameter using regular expresssions¶
The following code generates additional input prerequisite file names which match the original input files.
We want each job of our analyse() function to get corresponding pairs of xx.chunks and xx.red_indian files when
*.chunks are generated by the task function split_up_problem() and *.red_indian are generated by the task function make_red_indians():
@follows(make_red_indians) @transform(split_up_problem, # starting set of *inputs* regex(r"(.*).chunks"), # regular expression inputs([r"\g<0>", # xx.chunks r"\1.red_indian"]), # important.file r"\1.results" # xx.results ) def analyse(input_filenames, output_file_name): "Do analysis here"The equivalent code using @files_re looks very similar:
@follows(make_red_indians) @files_re( split_up_problem, # starting set of *inputs* r"(.*).chunks", # regular expression [r"\g<0>", # xx.chunks r"\1.red_indian"]), # important.file r"\1.results") # xx.results def analyse(input_filenames, output_file_name): "Do analysis here"