Added a script to change the sample names in an existing file that assumes case-insensitivity.

This commit is contained in:
paulfd 2019-09-22 02:11:22 +02:00
parent b89bc24a98
commit f3348aa112

72
scripts/sfz_sample_checks.py Executable file
View file

@ -0,0 +1,72 @@
#!/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)