72 lines
1.8 KiB
Python
Executable file
72 lines
1.8 KiB
Python
Executable file
#!/usr/bin/python3
|
|
import re
|
|
import os
|
|
import argparse
|
|
|
|
rex = r"sample=([a-zA-Z0-9-_#.&\/\s\\\(\),\*]+?)\s*(?=[a-zA-Z0-9_]*=|//.*|$|<[a-z]+>)"
|
|
|
|
|
|
parser = argparse.ArgumentParser(description="Simple script to update the sample names in an existing SFZ files")
|
|
parser.add_argument('file', type=str, help="SFZ input file")
|
|
parser.add_argument('--output', type=str, help="Output file name; if not specified, _corrected will be appended to the input")
|
|
parser.add_argument('--test', action='store_true', help="Test run")
|
|
args = parser.parse_args()
|
|
|
|
assert os.path.exists(args.file), "File does not exists"
|
|
|
|
root_directory = os.path.dirname(args.file) + '/'
|
|
|
|
def case_insensitive_check(filename):
|
|
elements = filename.split('/')
|
|
path = ''
|
|
for e in elements:
|
|
if path != '':
|
|
path += '/'
|
|
found = False
|
|
|
|
if os.path.exists(root_directory + path + e):
|
|
path += e
|
|
continue
|
|
|
|
for dir_entry in os.listdir(root_directory + path):
|
|
if dir_entry.lower() == e.lower():
|
|
path += dir_entry
|
|
found = True
|
|
|
|
if found == False:
|
|
return None
|
|
|
|
return path
|
|
|
|
with open(args.file, 'r') as file:
|
|
content = file.read()
|
|
|
|
output_content = content
|
|
replacements = 0
|
|
for match in re.findall(rex, content):
|
|
if not os.path.exists(root_directory + match):
|
|
possible = case_insensitive_check(match)
|
|
if possible is not None:
|
|
print("{} -> {}".format(match, possible))
|
|
replacements += 1
|
|
output_content = re.sub(match, possible, output_content)
|
|
else:
|
|
print("{} -> ????".format(match))
|
|
|
|
if args.test:
|
|
exit(0)
|
|
|
|
if replacements == 0:
|
|
print("All samples seem to exist, not writing a file...")
|
|
exit(0)
|
|
|
|
if args.output is None:
|
|
output_file, ext = os.path.splitext(args.file)
|
|
output_file += '_corrected'
|
|
output_file += ext
|
|
else:
|
|
output_file = args.output
|
|
|
|
print("Writing corrected file to", output_file)
|
|
with open(output_file, 'w') as file:
|
|
file.write(output_content)
|