This Python script reads a text file containing a list of numbers (such as node or element IDs), sorts them, removes duplicates, and groups consecutive numbers into compact ranges – just like MSC Patran’s range format. It’s a handy tool for preprocessing or organizing large ID lists efficiently.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
def read_numbers(filename): with open(filename, 'r') as file: numbers = [int(line.strip()) for line in file if line.strip().isdigit()] return sorted(set(numbers)) # Sort and remove duplicates def find_ranges(numbers): if not numbers: return [] ranges = [] start = prev = numbers[0] for num in numbers[1:]: if num == prev + 1: prev = num else: if start == prev: ranges.append(str(start)) else: ranges.append(f"{start}:{prev}") start = prev = num # Add the final range if start == prev: ranges.append(str(start)) else: ranges.append(f"{start}:{prev}") return ranges # Example usage input_filename = "elems.txt" numbers = read_numbers(input_filename) ranges = find_ranges(numbers) print(" ".join(ranges)) output_filename = "ranges.txt" fout = open(output_filename, 'w') print(" ".join(ranges), file=fout) fout.close() |
Input file: elems.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
1 2 3 4 5 6 10 11 23 14 15 83 16 12 25 24 |
Output file: ranges.txt
1 |
1:6 10:12 14:16 23:25 83 |
Recent Comments