# -*- coding: utf-8 -*- import os import re def read_file(file_path, only_first_line=False): opened_file = open(file_path) if only_first_line: lines = opened_file.readline() else: lines = opened_file.readlines() opened_file.close() return lines def read_file_line(file_path): return read_file(file_path, True) def read_file_lines(file_path): return read_file(file_path) def find_file_starting_from_reference_file_directory(reference_file, file_to_find): """Attempts to find file_to_find by navigating through directories from reference_file's parent directory.""" file_path = os.path.realpath(reference_file) folder_path = os.path.dirname(file_path) for root, unused_dirs, files in os.walk(folder_path): if file_to_find in files: return os.path.join(root, file_to_find) return None def get_indexes_of_lines_per_regex(file_lines, regex): regex_pattern = re.compile(regex) indexes_of_lines_defining_regex = [] for index, line in enumerate(file_lines): if regex_pattern.match(line): indexes_of_lines_defining_regex.append(index) return indexes_of_lines_defining_regex def get_bunches_of_lines_dividing_by_regex(file_lines, regex): lines = [] indexes_of_lines_per_regex = get_indexes_of_lines_per_regex(file_lines, regex) for index, index_of_lines in enumerate(indexes_of_lines_per_regex): try: next_regex_index = indexes_of_lines_per_regex[index + 1] current_regex_lines = file_lines[index_of_lines:next_regex_index] except IndexError: current_regex_lines = file_lines[index_of_lines:] lines.append(current_regex_lines) return lines def split_by_regexp(filename, regex): file_lines = read_file_lines(filename) return get_bunches_of_lines_dividing_by_regex(file_lines, regex)