import os
import re
import argparse
import sys
FILE_REX = re.compile(r".*(\d{2})\.(\d)\.raw")
def delete_odd_tracks(directory_path):
for filename in os.listdir(directory_path):
match = FILE_REX.match(filename)
if match:
track_value = int(match.group(1))
head_value = int(match.group(2))
if head_value not in {0, 1}:
print(f"Error: Unexpected head value '{head_value}' in file '{filename}'")
sys.exit(1)
if track_value % 2 != 0:
file_path = os.path.join(directory_path, filename)
os.remove(file_path)
print(f"Deleted '{filename}' (capture group: {track_value}, subset: {head_value})")
def renumber_even_tracks(directory_path):
even_files = {0: [], 1: []}
for filename in os.listdir(directory_path):
match = FILE_REX.match(filename)
if match:
track_value = int(match.group(1))
head_value = int(match.group(2))
if head_value not in {0, 1}:
print(f"Error: Unexpected head value '{head_value}' in file '{filename}'")
sys.exit(1)
if track_value % 2 == 0:
even_files[head_value].append((filename, track_value))
else:
print(f"Error: Unexpected odd track value '{track_value}' in file '{filename}'")
sys.exit(1)
for head_value, files in even_files.items():
files.sort(key=lambda x: x[1])
for i, (filename, _) in enumerate(files):
new_filename = re.sub(r"(\d{2})", f"{i:02}", filename, count=1)
if filename == new_filename:
continue
old_path = os.path.join(directory_path, filename)
new_path = os.path.join(directory_path, new_filename)
os.rename(old_path, new_path)
print(f"Renamed '{filename}' to '{new_filename}' in subset {head_value}")
def main():
parser = argparse.ArgumentParser(description="Process and renumber files in a directory.")
parser.add_argument("directory", help="Path to the directory containing the files.")
args = parser.parse_args()
delete_odd_tracks(args.directory)
renumber_even_tracks(args.directory)
if __name__ == "__main__":
main()